Sisällysluettelo
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)

