Käyttäjän työkalut

Sivuston työkalut


peliohjelmointi

BreakOut klooni

Breakout-peli on vanha klassikko, voit katsoa vaikkapa http://atari.com/arcade#!/arcade/superbreakout/play tai http://www.gamesgames.com/games/breakout, jollet tiedä, mistä puhutaan.

Pelikenttä

Aloita uusi projekti, nimeä se vaikka nimellä Arkanoid.

Valitse GameObject → Create Other → Cube ja anne sille nimeksi ”Pelikenttä”.

Muuta skaala (30,30,1) ja väriksi vihreä.

Siirrä Main Camera (0,0,-30).

Lisää Point Light (0,0,-10) ja muuta sen arvo Range 100.

Talleta Scene.

Luodaan pelille reunat.

Luo Cube kohtaan (0,15,0) ja Scale (30,1,1) ja anna sille nimeksi RajaYlä.

Muuta Pelikantän Z-koordinaatiksi 1.1.

Klikkaa hiiren oikealla RajaYlä → Duplicate ja nimeä kopio RajaVasen. Muuta sijainniksi (-15.5, -0.5, 0) ja Scaleksi (1,32,1)

Kopioi RajaVasen, nimeä kopio RajaOikea ja muuta X-koordinaatiksi 15.5.

Talleta ja kokeile peliä.

Pelaaja

Luo kuutio kohtaan (0, -15, 0) koolla (4, 1, 1). Anna nimeksi maila.

Muuta maila punaiseksi.

Luo skripti Pelaaja:

#pragma strict

function Start () {
}

function Update () {
	if(Input.GetKey("left"))
	{
		transform.Translate(-20*Time.deltaTime, 0, 0);
	}
	if(Input.GetKey("right"))
	{
		transform.Translate(20*Time.deltaTime, 0, 0);
	}

}

Liitä skripti mailaan ja kokeile toimivuus. Lisätään seuraavaksi mailan ohjaus hiirellä:

#pragma strict

function Start () {
	Screen.lockCursor = true;
}

function Update () {
	if(Input.GetKey("left"))
	{
		transform.Translate(-20*Time.deltaTime, 0, 0);
	}
	if(Input.GetKey("right"))
	{
		transform.Translate(20*Time.deltaTime, 0, 0);
	}

	var h = 30.0 * Time.deltaTime * Input.GetAxis("Mouse X");
	transform.Translate(h, 0, 0);

}

Testaa toimivuus.

Pallo

Luo Sphere kohtaan (0, -7, 0) ja vaihda nimeksi Pallo. Muuta sen väriksi keltainen.

Valitse Pallo → Add Component → PalloSkripti koodilla:

#pragma strict

var BeepSound : AudioClip;

static var launchtimer: float;
static var xspeed : float;
static var yspeed : float;
static var collflag : boolean;

function Start () {
	launchtimer = 2.0;
	xspeed = 8.0;
	yspeed = 8.0;
	collflag = true;
}

function Update () {
	transform.position.z = 0;
	launchtimer -= Time.deltaTime;
	if(launchtimer <= 0.0)
	{
		transform.Translate(Vector3(xspeed, yspeed, 0) * Time.deltaTime);
		launchtimer = 0.0;
	}
}

function OnTriggerEnter(other: Collider)
{
	audio.PlayOneShot(BeepSound);
}

Tarvittavan äänitiedoston voit etsiä netistä tai ladata .

Valitse Pallo → Add Component → Audio → Audio Source ja liitä äskeinen ääni Palloon.

Talleta ja kokeile peliä.

Valitse ”Play on Awake” pois, niin ääni ei kuulu pelin alussa.

Törmäykset

Luo skripti Seinä

#pragma strict

function OnTriggerEnter(other: Collider)
{
	PalloOhjaus.xspeed = -PalloOhjaus.xspeed;
	PalloOhjaus.collflag = true;
}

Yhdistä skripti RajaVasen ja RajaOikea olioihin.

Lisätään vielä liipaisimet ja jäykän kappaleen ominaisuudet: Valitse Pallo → Add Component → Physics → Rigidbody. Poista valinta ”Use gravity” (käytä painovoimaa).

Valitse RajaVasen ja siitä kohta ”IsTrigger”. Tee sama RajaOikea:lle.

Talleta ja kokeile peliä.

Tee YläSeinä skripti:

#pragma strict

function OnTriggerEnter(other: Collider)
{
	PalloOhjaus.yspeed = -PalloOhjaus.yspeed;
	PalloOhjaus.collflag = true;
}

Talleta skripti ja liitä se RajaYlä:än.

Aktivoi ”IsTrigger” valinta RajaYlä:ssä.

Tehdään seuraavaksi pallon tippumisen estävä skripti. Lisää Game object → Create empty ja anna sille nimeksi RajaAla. Muuta paikaksi (0, -17, 0) ja kooksi (35,1,1)

Luo skripti PalloAlkuun

#pragma strict

function OnTriggerEnter(other: Collider)
{
	other.transform.position = Vector3(0, -7, 0);
	PalloOhjaus.xspeed = 8.0;
	PalloOhjaus.yspeed = -8.0;
	PalloOhjaus.launchtimer = 1.0;
}

Liitä skripti RajaAla:an.

Lisää mailaan ”IsTrigger” ominaisuus.

Lisää pelaaja-skriptin loppuun

function OnTriggerEnter(other: Collider)
{
	PalloOhjaus.yspeed = -PalloOhjaus.yspeed;
	
	PalloOhjaus.collflag = true;
}

Talleta ja kokeile!

Yleensä palloa voi ohjailla, sen voi lisätä muuttamalla äsken lisättyä koodia:

function OnTriggerEnter(other: Collider)
{
	PalloOhjaus.yspeed = -PalloOhjaus.yspeed;
	
	if (other.collider.gameObject.transform.position.x > gameObject.transform.position.x)
	{
		PalloOhjaus.xspeed = Mathf.Abs(PalloOhjaus.yspeed);
	}
	else
	{
		PalloOhjaus.xspeed = -Mathf.Abs(PalloOhjaus.yspeed);
	}
	
	PalloOhjaus.collflag = true;
}

Tiilet

Miten saamme tehtyä nätisti tarpeeksi (120!) tiiltä peliin? Koodilla!

Luo tyhjä peliobjekti GameObject → Create Empty ja anna sille nimeksi TiiltenTekijä. Luo skripti TiiltenTekijä ja liitä se äsken luotuun objektiin.

#pragma strict

function Start () {
	for (var y = 0; y < 8; y++)
	{
		for (var x = 0; x < 15; x++)
		{
			var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
			cube.transform.position = Vector3 (x*2 - 14, y - 1, 0);
			cube.transform.localScale = Vector3 (1.9, 0.9, 1);
			//cube.AddComponent("TiiliSkripti");
			cube.collider.isTrigger = true;
			cube.renderer.material.color = Color(0.2 + y*0.08, 0.3, 1.0);
		}
	}


}

Talleta ja kokeile peliä!

Muutetaan pelin valaistusta. Siirrä valon tyypiksi Directional (inspektorista) ja Intensity arvoon 0.63. Tiilten pitäisi näyttää nyt paremmilta.

Muuta äskeistä skriptiä seuraavasti:

#pragma strict

function Start () {
	for (var y = 0; y < 8; y++)
	{
		for (var x = 0; x < 15; x++)
		{
			var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
			cube.transform.position = Vector3 (x*2 - 14, y - 1, 0);
			cube.transform.localScale = Vector3 (1.9, 0.9, 1);
			//cube.AddComponent("TiiliSkripti");
			cube.collider.isTrigger = true;
			//cube.renderer.material.color = Color(0.2 + y*0.08, 0.3, 1.0);
			if (y < 2)
				cube.renderer.material.color = Color.yellow;
			else if (y < 4)
				cube.renderer.material.color = Color.cyan;
			else if (y < 6)
				cube.renderer.material.color = Color.blue;
			else 
				cube.renderer.material.color = Color.red;
				
		}
	}


}

Väreistä tulee hieman kirkkaampia :-)

Pelattava versio

Kirjoitetaan skripti, joka poistaa tiilen ja laittaa pallon pomppaamaan törmäyksestä tiileen.

Luo JavaScript, anna sille nimeksi TiiliSkripti ja kirjoita:

#pragma strict

function OnTriggerEnter(other: Collider)
{
	if(PalloOhjaus.collflag == true)
	{
		PalloOhjaus.yspeed = -PalloOhjaus.yspeed;
		PalloOhjaus.collflag = false;
		Destroy(gameObject);
	}
}

Poista kommentti-merkit (//) TiilenTekijä-skriptistä rivin 11 alusta.

Talleta ja kokeile!

Pisteet

Lisää GameObject → Create Empty ja anna sille nimeksi Pisteet. Luo skripti Pisteet:

#pragma strict

static var score: int;
static var lives: int;

function Start () {
	score = 0;
	lives = 3;
}

function Update () {

}

function OnGUI()
{
	GUI.Box(Rect(10,10,90,30), "Score:   " + score);
	GUI.Box(Rect(Screen.width - 100,10,90,30), "Lives:   "+lives);
}

Mieti, miten saat pelin pisteet toimimaan oikein? (Ja toteuta se)

Valmis koodi

Pong-pelin paketti

peliohjelmointi.txt · Viimeksi muutettu: 2015/08/13 07:20 / 127.0.0.1