task_green.png

4. Bevezető projekt - Számkitalálós játék

4.1. Játékmód színbeállításai

Unity-ben játékmódban is lehetőségünk van változtatni az egyes beállításokon, ezek azonban a szerkesztő módba való visszaváltáskor elvesznek. Ez rendszerint azért következik be, mert nem tudatosul bennünk, hogy játék módban vagyunk éppen, amikor egy beállításon módosítunk. Hogy mindig egyértelmű legyen, hogy éppen szerkesztő vagy játékmódban vagyunk, be lehet állítani a játékmódhoz egy külön színsémát, amelyből mindig egyértelmű lesz a pillanatnyi mód. A színséma alapszínét a Preferences » Colors » Playmode tint pont alatt adhatjuk meg. 

 

4.2. A számkitalálós játék

A Unity-vel való ismerkedést a számkitalálós játék megvalósításával folytatjuk. Az eddigi próbálkozásainkkal ellentétben ez egy 2D-s projekt lesz. Az alapfeladat ugyanaz, mint amit már megvalósítottunk Scratch-ben és Python-ban is: a felhasználó gondol egy számra, a program pedig megpróbálja kitalálni ezt a számot egy tipp-orozat segítségével. A felhasználónak a számítógép minden tippjére vonatkozóan választ kell adnia arra a kérdésre, hogy az általa gondolt szám, kisebb, nagyobb vagy egyenlő a tippelt számmal. E játék megvalósítása során arra fókuszálzunk, hogy hogyan kell kialakítani a játék felhasználói felületét (menük és nyomógombok felhasználásával) és megvalósítani a kívánt játékmenetet leképező navigálást.

Hozzunk létre egy új 2D-s Unity projektet NumberGuessing néven és hozzuk létre benne a következő scene-eket: Start, Game, Lose, Win. Ezeket fogjuk majd arra használni, hogy kialakítsuk a játékmenetet.

4.3. Az objektum-orientáltság alapjai

A Unity-ben a programjainkat C# nyelven írjuk, ami egy úgy nevezett objektum-orientált programozási nyelv. Fontosabb fogalmak:

  • Osztály (class) - elméleti csoport, tervrajz, valós objektumok modellje. Azon jellemzők összessége, amely meghatározza az osztályba tartozó egyedek tulajdonsgait és viselkedését. Példa: Skoda Fabia, harcos, akadály. 

  • Osztály tulajdonságai, tagvátozói (properties, member variables): pl. végsebesség, szín, üzemanyag, váltó típusa, méret, felszereltség, stb.

  • Objektum, egyed (object) - az osztály egy konkrét példánya, egy bizonyos darab (pl. a szomszéd kék automata Fabia-ja).

  • Metódusok, eljárások (methods) - az osztály vagy objektum képességei (gyorsítás, fékezés, lövés, ütközés, stb).

 

Hasznos linkek:

  • A Unity objektum​-orientált programozás bemutatása:

  • Általános (nem Unity-specifikus)  magyar nyelvű ismertető:

 
links.png
 
 
 

4.4. Text elemek scene-hez való hozzáadása, pozicionálás

 

1. Kezdjünk a Start scene kialakításával. Nyissuk meg ezt a scene-t, figyeljük meg, hogy hogyan változik a Scene nézet címsora, amely tartalmazza az aktulis scene és projekt nevét, valamint a célplatformot.

2. Adjunk a scene-hez egy Text objektumot a GameObject » UI » Text menüpontot kiválasztva. Figyeljük meg, hogy a Hierarchy nézetben a Text objektum mellett megjelenik egy Canvas és egy EventSystem objektum is. Míg a kamerának és a GameObject-eknek van egy Transform komponense, addig a Canvas-nak Rect Transform komponense van, amely rugalmasabb pozicionálást tesz lehetővé a 2D-s térben.  Ehhez UI módba kell váltanunk, a Rect eszközt kiválasztva a T billentyű lenyomásával. Ekkor a Text kmponens négy sarkában megjelenik egy-egy kék pötty, amelyek segítségével a komponens átméretezhető, illetve középen megjelenik egy ú.n. hivatkozási pont (pivot point). Az Anchor Presets tulajdonsággal érdemes kísérleteznünk valamennyit: itt adhatjuk meg, hogy ha átméretezésre kerül a Canvas, akkor a rajta található Text objektum pozíciója és mérete hogyan változzon. Ez például akkor lehet hasznos, ha olyan mobil játékot fejlesztünk, amely álló és fekvő módban is jól használható kell, hogy legyen.

3. Egy főcím (Title) és egy alcím (Subtitle) Text komponens segítségével alakítsuk ki a következő képernyőt a Start scene-ben:

task_green.png
task_green.png
task_green.png
img020 - 4.4 - 1.png

4. A Start scene-hez még két nyomógombot szeretnénk hozzáadni: az egyik elindítja majd a játékot, a másik pedig kilép belőle. Ehhez vegyünk fel még két Text komponenst Start és Kilépés szöveggel, illetve StartButton és QuitButton névvel. Ezekből a Text komponensekből készítünk majd nyomógombokat egy-egy Button komponens hozzáadásával és a Highlighted Color és Pressed Color tulajdonságok beállításával. Ha ezen túlvagyunk, akkor a gomboknak már reagálniuk kell az egérre és a rájuk való kattintásra, már csak meg kell mondanunk, hogy pontosan mi történjen a kattintáskor. Nem meglepő, hogy ehhez szkripteket kell majd írnunk.

5. A kívánt funkciókat egy LevelManager objektum fogja megvalósítani, tehát hozzuk azt létre a GameObject » Create Empty menüpont kiválasztásával, majd reseteljük a pozícióját. A frissen létrehozott objektumhoz adjunk hozzá egy egyező nevű LevelManager szkriptet. Töröljük a Start() és Update() metódusokat és hozzunk létre egy LoadLevel(string name) és egy RequestQuit() metódust, mindkettő egyelőre csak írja ki a konzolra, hogy mi lenne a feladata. A StartButton és QuitButton Button konponensében állítsuk be az OnClick() eseménykezelőjét a LevelManager megfelelő eljárásaira.

6. A LoadLevel() metódust valósítsuk meg a SceneManager.LoadScene(name) meghívásával. Ehhez szükgésünk lehet arra, hogy a Build Settings-ben hozzáadjuk a build-hez a scene-jeinket. A RequestQuit() megvalósításához használjuk az Application.Quit() metódust.

A LevelManager.cs szkript teljes forrása ilyen lesz:

task_green.png
task_green.png
task_green.png

7. Szükség lesz még az alábbi szkript fájlra, amely a játék logikáját valósítja meg. Mentsük el a forrást NumberGuess.cs néven és adjuk hozzá a projektünkhöz asset-ként:

task_green.png

8. A guessText mezőt kössük össze az Inspector-ban a megfelelő Text elemmel. A Kevesebb és Több gombokat kössük a NumberGuess.GuessLower() és NumberGuess.GuessHigher() metódusokra, az Eltaláltad gombot pedig a LevelManager.LoadLevel("Lose")-ra. A Win és Lose scene-eket is fejezzük be. A tippeket véletlenszerűvé tehetjük, ha szeretnénk.

9. A projekt tömörített teljes forrása letölthető innét.

A projektünket közzé tehetjük a weben, ha készítünk egy WEbGL build-et és az eredményt zip-be tömörítve feltöltjük pl. a sharemygame.com-ra.

task_green.png
task_green.png