JátékLogika.

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

JQuery 8. előadás.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
C++ programozási nyelv Gyakorlat hét
FRAME-k (keretek). FRAME-k A frame-ek (keretek) segítségével a képernyőt felosztva egyszerre jeleníthetünk meg több webes dokumentumot a képernyőn. Fejlec.html.
4. Feladat (2) Foci VB 2006 Különböző országok taktikái.
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 7. Gyakorlat Operator overloading.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
C# tagfüggvények.
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
PHP VII Sütik, munkamenetek. Sütik Mi az a süti? A süti (cookie) állapotot tárol a felhasználó böngészőjében. Pl. ha egy oldalon beállítható, hogy milyen.
P ROGRAMOZÁS I/O műveletek. S YSTEM.C ONSOLE A programjainknak fontos része a felhasználóval való kommunikáció. Adatokat kell kérni tőle, vagy közölnünk.
Számítógépes grafika 3. gyakorlat.
Alapszint 2.  Készíts makrót, ami a kijelölt cellákat egybenyitja, a tartalmat vízszintesen és függőlegesen középre igazítja és 12 pontos betűméretűre.
Az Excel mint „interaktív” kérdőív
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
3D képszintézis fizikai alapmodellje Szirmay-Kalos László Science is either physics or stamp collecting. Rutherford.
Java programozási nyelv Vezérlési szerkezetek
Java programozási nyelv Filekezelés
Komoróczy Tamás 1 Java programozási nyelv Stringek.
Java programozási nyelv Metódusok
Egyenesvonalú (lineáris) adatszerkezetek
Webprogramozó tanfolyam
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
A 2. géptermi beszámoló VBA anyagának összefoglalása
1 Függvények használata – az első függvénynél a formulát háromszor be kell írni, rendre az x, x+h, x-h argumentumokkal, – a második függvénynél az új (feltételes.
Az 5,6,7 laborok VBA anyagának összefoglalása
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Windows Forms alkalmazás készítése Czigléczky Gábor 2009.
Multimédia Hangok, videók. Hangok Unityben A hangot hangforrás (Audio Source) játssza le és hallgatók (Audio Listener) segítségével hallhatjuk A Listener.
Hálózati többjátékos mód Multiplayer játékok. UNet HLAPI Hálózati játékot magunknak megírni hosszadalmas és bonyolult Kommunikáció, szinkronizáció, távoli.
Unity alapjai. Új projekt Asset Import Másoljuk be a boltív modellünket az asset könyvtárba.
Karakter animáció. Animáció alapok (ismétlés) Új 3D project (CharacterAnimation) Adjunk a jelenethez egy gömböt Hozzunk létre egy AnimatorControllert.
Karakter Animáció és Kontroller Unity. Kezdeti lépések Alap projekt letöltése Egy statikus geometriát láthatunk Meg vannak a fizikai befoglalók is.
Platformer játék Pálya generálás. Új projekt Csináljunk új 2D projektet Neve legyen Platformer Kép asseteket töltsük le, és importáljuk a projektbe Majd.
Unity programozási gyakorlatok
Sprite animáció, kamera követés, háttér mozgás
Neumann János Informatikai Kar
Unity alapjai.
Neumann János Informatikai Kar
3d alakzatok, fizikai anyagok, kényszerek
a programegységek között
„Designer-barát” játéklogika
Unity 3D alapok + gyakorlás.
Neumann János Informatikai Kar
GUI.
Fodor Edina, óra feladata Fodor Edina,
A CLIPS keretrendszer
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Változók.
Unity.
Ghost Hunter Game logic/HUD.
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
B M Java Programozás 1. Gy: Java alapok IT A N Ismétlés ++
Neumann János Informatikai Kar
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Python alapok Vincellér Zoltán.
Folyamatok.
Szálszinkronizáció.
Függvénysablonok használata
Előadás másolata:

JátékLogika

A karakterrel már szépen tudunk mozogni Azt is észrevesszük, ha nekimentünk egy érmének/szörnynek Jó lenne, ha ezekre az eseményekre reagálnánk: Pontszám, életerő/élet bevezetése Életvesztés, játék vége, szörny megölése stb… Jó lenne, ha a szörnyek nem csak úgy áldogálnának, hanem pl. megtámadnának

Élet, pontszám Kell egy objektum, ami tárolja ezeket az adatokat Hozzunk létre egy üres játékobjektumot Nevezzük el: PlayerStatus Adjunk hozzá egy új szkriptet: PlayerStatus.cs: public class PlayerStatus : MonoBehaviour { public int life = 3; public int points = 0; }

Az inspectorban megjelenik ez a két adattag Amíg nincs GUI, addig ezt figyeljük

Múlt órán eljutottunk addig, hogy az érmék érzékelték, ha a játékos beléjük ütközött Ha nincs meg, adjunk az érme prefabhoz egy új szkriptet: CoinTrigger Adjunk hozzá CircleCollider-t Állítsuk be a collider-re a trigger kapcsolót Állítsukbe a prefabra, hogy az Ignore Raycast rétegbe tartozzon. Ezt mindhárom érme prefabrael kell végeznünk (a szkript újrahasználható) (szkript tartalm és beállítások a köv. dián)

public class CoinTrigger : MonoBehaviour { GameObject player; void Start () { player = GameObject.FindWithTag("Player"); } void OnTriggerEnter2D(Collider2D other) { if (other.gameObject == player) Debug.Log ("erme felveve");

Módosítsuk a CoinTrigger szkriptet: public class CoinTrigger : MonoBehaviour { GameObject player; PlayerStatus playerStatus; void Start () { player = GameObject.FindWithTag("Player"); playerStatus = GameObject.Find ("PlayerStatus").GetComponent<PlayerStatus>(); } void OnTriggerEnter2D(Collider2D other) { if (other.gameObject == player) playerStatus.points += 10;

Futtassuk és figyeljük a PlayerStatus objektum szkriptjének paramétereit

Érdemesebb a PlayerStatus objektumra bízni a pontok hozzáadását. Végezhet más műveletet is (pl pontszámkijelzés), ami végképp nem az érme objektum felelőssége Bővítsük a PlayerStatus szkriptjét

public class PlayerStatus : MonoBehaviour { public int life = 3; public int points = 0; public void addPlayerPoints(int value) { points += value; } Használata (CoinTrigger.cs): if (other.gameObject == player) playerStatus.addPlayerPoints (10);

Futtassuk, ellenőrizzük a helyes működést Ha felvettünk egy érmét, annak el kellene tűnnie: public class CoinTrigger : MonoBehaviour { … void OnTriggerEnter2D(Collider2D other) { if (other.gameObject == player) playerStatus.addPlayerPoints (10); Destroy(gameObject); }

Önálló Feladat A szörnyekre hasonlóan járjunk el Kell collider, trigger, trigger szkript Ütközéskor PlayerStatus.decreaseLife függvényének hívása (ezt meg is kell írni, csökkenti az életek számát) Ütközés után a szörny meghal/eltűnik

Ha a szörnyekkel készen vagyunk … A játékos végleges halála kettő esetben fordulhat elő: Elfogyott az élete (life == -1) Leesett a szakadékba Mindkettő esetén töltsük újra a pályát Adjunk hozzá egy új függvényt a PlayerStatus-hoz: playerDie. Ezt kell hívni leeséskor és akkor, ha elfogyott az élet. Ez a függvény töltse be az új pályát

public class PlayerStatus : MonoBehaviour { … public void playerDies() { life = -1; } void Update () { if (life <= -1) { Application.LoadLevel("scene2");

public class FallTrigger : MonoBehaviour { public GameObject player; PlayerStatus playerStatus; void Start () { player = GameObject.FindGameObjectWithTag("Player"); playerStatus = GameObject.Find ("PlayerStatus").GetComponent<PlayerStatus>(); } … void OnTriggerEnter2D(Collider2D other) { if (other.gameObject == player) playerStatus.playerDies();

Egy rövid ideig várjunk, mielőtt újratöltjük a pályát: public class PlayerStatus : MonoBehaviour { … float gameOverTime = 0; void Update () { if (life <= -1) { gameOverTime += Time.deltaTime; if(gameOverTime > 3.0f) Application.LoadLevel("scene2"); }

Szörnyek viselkedése Ha elég közel érünk hozzájuk, megtámadnak Támadás: felénk közelednek Adjunk a szörny prefabokhoz új szkriptet: MonsterController.cs Adjunk hozzá egy merev testet is Meg fogjuk mozgatni, le lehet lökni: dinamikus fizikai testként kell működnie, úgy, mint a játékosnak A játékoshoz hasonlóan kell felépítenünk

MonsterController.cs public class MonsterController : MonoBehaviour { public float speed = 1.0f; public float range = 20.0f; GameObject player; Rigidbody2D physiscBody; void Start () { player = GameObject.FindGameObjectWithTag ("Player"); physiscBody = GetComponent<Rigidbody2D>(); } void FixedUpdate () { Vector3 playerPos = player.transform.position; Vector3 pos = transform.position; Vector3 dir = playerPos - pos; float dist = dir.magnitude; if (dist < range) { Vector3 oldVel = physiscBody.velocity; dir = new Vector3(Mathf.Sign(dir.x) * speed,0,0); Vector3 newVel = oldVel + dir; physiscBody.velocity = newVel;

Önálló feladat Meg kellene akadályozni, hogy a pálya elején és a végén leessünk Kell egy collider mindkét oldalra A pálya elején lévőnek tudjuk a helyét A pálya végén lévőt a LevelGenerator tudja a legkönnyebben a helyére rakni

Önálló feladat Ha elértük a pálya szélét, töltődjön újra a pálya A szörnyeket animálni kellene Új monster textúra 2 képkockát tartalmaz Kell animator és animation Legyenek a pályán felvehető szivecskék is, amik növelik az életünket (de az életünk nem lehet több 3-nál) Az érméhez hasonlóan kell megcsinálni Heart.png

HUD

HUD: Head-Up Display Olyan 2D képernyő elemek, melyek a játék állapotát mutatják Tipikus használat: pontszám, életerő egyébb információ kijelzés, célkereszt, grafikai díszitő elemek

HUD A mi játékunkban a pontszám, életerő kijelzésére használhatjuk Lesz változó és fix szöveg is A fix szövegek egy textúrában vannak: HUD.png Importáljuk be Állítsuk be, hogy több képet tartalmaz Sprite editorban jelöljük ki az egyes képeket

Hozzunk létre egy új objektumot: GameObject->UI->Canvas

Hozzunk létre egy uj objektumot: Nevezzük el GameOverText-nek GameObject->UI->Image Nevezzük el GameOverText-nek A megjelenítendő képre állítsuk be a Game Over feliratot tartalmazó Assetet (köv dia) Állítsuk be a pozícióját/méretét Próbáljuk ki a játékot Ha el akarjuk rejteni, az Image komponens kell letiltanunk (tiltsuk is le) Próbáljuk ki (nem jelenik meg)

Game Over Oldjuk meg, hogy ha leesünk, akkor jelenjen meg ez a felirat A PlayerStatus szkriptből lehet ezt legkönnyebben megtenni A GUI dolgait érdemes külön kezelni, ezért készítsünk egy üres játék objektumot Nevezzük el HUD-nak Adjunk hozzá egy szkriptet HUD.cs

HUD.cs using UnityEngine; using UnityEngine.UI; using System.Collections; public class HUD : MonoBehaviour { GameObject gameOverText; void Start () { gameOverText = GameObject.Find("GameOverText"); } public void showGameOver() { gameOverText.GetComponent<Image> ().enabled = true;

PlayerStatus.cs public class PlayerStatus : MonoBehaviour { … HUD HUDObject; void Start() { HUDObject = GameObject.Find ("HUD").GetComponent<HUD>(); } void Update () { if (life <= -1) { gameOverTime += Time.deltaTime; HUDObject.showGameOver(); if(gameOverTime > 3.0f) Application.LoadLevel("scene2");

Készítsük el az alábbi HUD kinézetet:

Élet megjelenítése A HUD objektumra érdemes bízni Tudnia kell a játékos életszámáról (szkriptből könnyen lekérdezzük) Kell egy függvény ami az aktuális életnek megfelelően a megfelelő szív képeket jeleníti csak meg Ezt a függvényt hívja majd a PlayerStatus, ha változik az életereje

HUD.cs public class HUD : MonoBehaviour { Image gameOverText; Image heartIcon1; Image heartIcon2; Image heartIcon3; void Start () { gameOverText = GameObject.Find("GameOverText").GetComponent<Image> (); heartIcon1 = GameObject.Find("HeartIcon1").GetComponent<Image> (); heartIcon2 = GameObject.Find("HeartIcon2").GetComponent<Image> (); heartIcon3 = GameObject.Find("HeartIcon3").GetComponent<Image> (); } public void showGameOver() { gameOverText.enabled = true; public void updateLife(int life) Image[] hearths = {heartIcon1, heartIcon2, heartIcon3}; for (int i = 0; i < hearths.Length; ++i) if(life > i) hearths[i].enabled = true; else hearths[i].enabled = false; if (life == -1) {showGameOver();}

PlayerStatus.cs public void decreaseLife() { life--; HUDObject.updateLife (life); } public bool increaseLife() if (life == 3) return false; life++; return true; public void playerDies() life = -1; void Update () { if (life <= -1) { gameOverTime += Time.deltaTime; HUDObject.showGameOver(); if(gameOverTime > 3.0f) Application.LoadLevel("scene2");

Változó szöveg: GameObject->UI->Text Nevezzük el: ScoreValueText Szövegszínt betűméretet állítsuk be (igazítsuk a többi képernyőelemhez) Alap szöveg: “0”

HUD.cs public class HUD : MonoBehaviour { … Text scoreText; void Start () { scoreText = GameObject.Find (" ScoreValueText ").GetComponent<Text> (); } public void updateScore(int score) { scoreText.text = System.Convert.ToString (score);

PlayerStatus.cs public class PlayerStatus : MonoBehaviour { … public void addPlayerPoints(int value) { points += value; HUDObject.updateScore (points); }

VÉGE