Käyttäjän työkalut

Sivuston työkalut


peliohjelmointi

Erot

Tämä näyttää erot valitun ja nykyisen version kesken tästä sivusta.

Linkki vertailunäkymään

Both sides previous revisionEdellinen revisio
Seuraava revisio
Edellinen revisio
peliohjelmointi [2014/04/02 21:01] – [Pelikenttä] moverstipeliohjelmointi [2015/08/13 07:20] (nykyinen) – ulkoinen muokkaus 127.0.0.1
Rivi 53: Rivi 53:
  transform.Translate(20*Time.deltaTime, 0, 0);  transform.Translate(20*Time.deltaTime, 0, 0);
  }  }
- 
- var h = 30.0 * Time.deltaTime * Input.GetAxis("Mouse X"); 
- transform.Translate(h, 0, 0); 
  
 } }
Rivi 84: Rivi 81:
 </code> </code>
  
 +Testaa toimivuus.
 +
 +===== Pallo =====
 +
 +Luo Sphere kohtaan (0, -7, 0) ja vaihda nimeksi Pallo. Muuta sen väriksi keltainen.
 +
 +Valitse Pallo -> Add Component -> PalloSkripti koodilla:
 +
 +<code>
 +#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);
 +}
 +</code>
 +
 +Tarvittavan äänitiedoston voit etsiä netistä tai ladata {{:aani.mp3|tästä}}.
 +
 +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ä
 +
 +<code>
 +#pragma strict
 +
 +function OnTriggerEnter(other: Collider)
 +{
 + PalloOhjaus.xspeed = -PalloOhjaus.xspeed;
 + PalloOhjaus.collflag = true;
 +}
 +</code>
 +
 +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:
 +<code>
 +#pragma strict
 +
 +function OnTriggerEnter(other: Collider)
 +{
 + PalloOhjaus.yspeed = -PalloOhjaus.yspeed;
 + PalloOhjaus.collflag = true;
 +}
 +</code>
 +
 +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
 +<code>
 +#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;
 +}
 +</code>
 +
 +Liitä skripti RajaAla:an.
 +
 +Lisää mailaan "IsTrigger" ominaisuus.
 +
 +Lisää pelaaja-skriptin loppuun
 +<code>
 +
 +function OnTriggerEnter(other: Collider)
 +{
 + PalloOhjaus.yspeed = -PalloOhjaus.yspeed;
 +
 + PalloOhjaus.collflag = true;
 +}
 +</code>
 +
 +Talleta ja kokeile!
 +
 +Yleensä palloa voi ohjailla, sen voi lisätä muuttamalla äsken lisättyä koodia:
 +<code>
 +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;
 +}
 +</code>
 +
 +===== 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.
 +
 +<code>
 +#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);
 + }
 + }
 +
 +
 +}
 +
 +</code>
 +
 +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:
 +<code>
 +#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;
 +
 + }
 + }
 +
 +
 +}
 +</code>
 +
 +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:
 +<code>
 +#pragma strict
 +
 +function OnTriggerEnter(other: Collider)
 +{
 + if(PalloOhjaus.collflag == true)
 + {
 + PalloOhjaus.yspeed = -PalloOhjaus.yspeed;
 + PalloOhjaus.collflag = false;
 + Destroy(gameObject);
 + }
 +}
 +</code>
 +
 +Poista kommentti-merkit (%%//%%) TiilenTekijä-skriptistä rivin 11 alusta.
 +
 +Talleta ja kokeile!
 +
 +===== Pisteet =====
 + 
 +Lisää GameObject -> Create Empty ja anna sille nimeksi Pisteet. Luo skripti Pisteet:
 +<code>
 +#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);
 +}
 +</code>
 +
 +Mieti, miten saat pelin pisteet toimimaan oikein? (Ja toteuta se)
 ===== Valmis koodi ===== ===== Valmis koodi =====
  
-{{:arkanoid.zip|Valmis projekti zip-tiedostona}}+{{:arkanoid.zip|Valmis projekti zip-pakettina}} 
 + 
 +==== Pong-pelin paketti ==== 
 + 
 +{{:pong.zip|Pong-peli zip-pakettina}} 
peliohjelmointi.1396461690.txt.gz · Viimeksi muutettu: 2015/08/13 07:18 (ulkoinen muokkaus)