Kezdők bevezetés a Unity-be (6. rész)

Habár a repkedés önmagában is izgalmas lehet, még szórakoztatóbb, ha az űrhajónkkal lövöldözni is tudunk. A cél eléréséhez szükséges összes szkript megtalálható a példafájlokban, így túl sokat nem is kell majd hozzáadni.

Az ágyúk felszerelése

Válasszuk ki a Spaceship objektumot a Hierarchy nézetből, nyissuk meg az Assets/Scripts mappát, majd innen húzzuk az IonCannon szkript sort az Inspector-ba:

Ionágyú

Észrevehetjük, hogy egy Audio Source nevű komponens automatikusan hozzáadódott a GameObject-hez a szkripttel együtt. Néhány szkript nem fut önállóan, szüksége van más komponensekre is, melyeket a Unity automatikusan hozzáad, ha még nincsenek a GameObject-hez rendelve.

A lövési hang lejátszásához szükségünk lesz egy Audio Source-ra és egy Audio Clip-re. Az Audio Source bármilyen GameObject-hez csatlakoztatható, míg az Audio Clip csupán egy hangfájl.

Húzzuk a shoot hangot a Sounds mappából a Project ablakban lévő Fire Sound mezőbe:

Ágyú hangja

Az IonCannon szkript esetében láthatjuk, hogy az rendelkezik egy Bullet nevű mezővel. A következő feladatunk, hogy létrehozzuk a lövedék objektumot. Szerencsére nem kell ehhez művésznek lenni, ebben a példajátékban egy csilli-villi, animálódó plazmagömb helyett egy egyszerű gömb is megteszi.

Kattintsunk a Create gombra a Hierarchy nézetben. A 3D Oject/Sphere opciót válasszuk ki:

Lövedék hozzáadása

A Hierarchy nézetben a Sphere-t kiválasztva, majd Inspector-ra váltva, állítsuk a scale értéket 0.47-re. A gömböt ezután nevezzük el Bullet-nek.

Mivel a lövedék a scene-en belül fog mozogni, a fizikai motort is be kell izzítanunk. A Bullet-hez -a már ismert módon- adjunk hozzá a Physics/RigidBody komponenst az Add Component gombbal.

A lövedéknek lesz egy előre beállított sebessége, így az Is Kinematic opciót kapcsoljuk ki a Use Gravity-vel együtt.

A lövedék mozogni fog, miután elhagyta a képernyőt úgy, ahogyan az űrhajó tette ezt eredetileg. Ezt orvosolandó, húzzuk be a Bullet szkriptet a Project ablakból a Bullet GameObject-be. Ettől fogva a lövedék megsemmisül, ha kilép a képernyőről.

A Bullet objektumot már csak a Prefab mappába kell húzni. Így létrejön a Bullet Prefab, és szkript használatával lehetőségünk lesz sok-sok lövedéket létrehozni. Már lövedék Prefab-ként van jelen, így törölhetjük a Hierarchy-ban lévő példányt.

A Spaceship-et ismét válasszuk ki az Inspector-ban, és adjuk hozzá a Bullet Prefab-ot a Bullet mezőhöz. Az Inspector nézetnek hasonlóan kell kinéznie:

Ionágyú beállítása

Már csak az eget kell beállítani. Az űrhajónak egy üres, fekete térben kellene repkednie. Ehhez válasszuk ki a Main Camera-t a Hierarchy nézetből, majd az Inspector-ban a Clear Flags opciót állítsuk Solid Color-ra, a Background Color-t pedig feketére:

Kamera beállítása

Ezek után nem kell mást tenni, mint elmenteni a munkánkat, és kipróbálni az új ionágyút.

Ionágyú kipróbálása

Űrtörmelékek elhelyezése

Lövöldözni egy űrhajóval akkor igazán szórakoztató, ha van is mire lőni, ezért a következőkben aszteroidákat fogunk elhelyezni az űrben.

Keressük meg a rock_d_05.obj fájlt a példafájlok között, és húzzuk be a Models mappába a Project ablakban. Duplán kattintva nevezzük át a rock_d_05-ot Asteroid-ra:

Modellfájl átnevezése

Ez a fájl csak a modellről szolgáltat információt, nem tartalmaz semmilyen animációt.

Húzzuk az Asteroid-ot a Scene nézetbe, így létre is hozhatunk belőle egy példányt. Az így behúzott aszteroida egyszerű fehér színű:

Fehér aszteroida modell

Ugyan lehetne ez egy jégalapú üstökös maradványa is, de jobban fog kinézni, ha adunk hozzá valamilyen textúrát. Válasszuk ki az Asteroid GameObject leszármazott objektumát, a rockLP001-et. Az Inspector nézetben láthatjuk, hogy ez a GameObject-nek Mesh Renderer komponenssel is rendelkezik. A renderer rajzolja ki az objektumot, de ehhez némi segítségre van szüksége. Itt jön képbe a Materials opció.

A Materials határozza meg az objektum kinézetét. Például egy pamut anyagú egészen máshogy nézne ki, mint egy plasztik.

A Unity ezt shader-ek használatával éri el. De mi az a shader? A shader egy C-szerű nyelven íródott egyszerű program, amely a GPU-n fut. A shader elég egyszerű lehet ahhoz, hogy textúrát rendereljen egy kockán, de olyan komplex is, hogy vizet szimuláljon. A Unity nagyon sok beépített shader-t szolgáltat, például tud eget renderelni, de áttetszőnek is tud mutatni egy objektumot.

Nyissuk meg a Materials mappát a Project ablakban, és itt kattintsunk a Create gombra. A legördülő menüből válasszuk ki a Materials-t és nevezzük el Asteroid-nak. Az Inspector-ban így már látni fogjuk az egy anyaghoz tartozó tulajdonságokat.

Anyag beállítása

  • A Shader opció sok beépített lehetőség közül enged választani. Az alap Standard shader nagyon rugalmas beállítási lehetőséggel bír, így maradjunk annál.
  • Ha egy aszteroidát eltalálunk, akkor azt szeretnénk, hogy az eltűnjön. Ehhez a Rendering Mode-ot állítsuk Fade-re.
  • Az Albedo tulajdonság tartalmazza a textúrát. Húzzuk a flint_like_rock_4787 képet a Textures mappából a Albedo mezőbe:

Aszteroida anyagának beállítása

Az anyag azonban túl simának tűnik, mintha ki lenne fényesítve:

Polírozott aszteroida

A Metallic tulajdonság alatt két csúszkát találunk. Az első meghatározza az anyag fémes kinézetét, míg a második a textúra durvaságát hivatott mutatni.

Állítsuk be a Metallic csúszkát 0.219-re, a Smoothness-t pedig 0.149-re. Az anyagunk ezután ehhez hasonló képet kell fessen:

Fémes aszteroida

A anyagunk már be van állítva, ezután már csak hozzá kell adnunk az aszteroidánkhoz. Az Asteroid anyagot a Project ablakból húzzuk rá a Scene nézetben lévő Asteroid GameObject-re:

Anyagminta hozzáadása

A Debris szkript automatikusan hozzáad egy Sphere Collider-t, RigidBody-t és egy Audio Source-t az aszteroidához. Ha mindezzel megvagyunk, állítsuk be a paramétereket:

Asteroid GameObject beállításai

  1. A Sphere Collider közepét állítsuk 0.01, -0.09, 0.89 értékekre.
  2. A Radius-t állítsuk 1.49-re.
  3. Pipáljuk be az Is Trigger opciót.
  4. A RigidBody használatához pipáljuk ki a Use Gravity opciót.
  5. Pipáljuk be az Is Kinematic opciót.
  6. A Debris szkript esetében állítsuk a Min Speed-et 15-re és a Max Speed-et 30-ra.
  7. Húzzuk az explosion hangfájlt a Sounds mappából az Explosion Sound mezőhöz.
  8. A transform-nál az Asteroid GameObject minden Scale tulajdonságát állítsuk be 3.02-re.
  9. A Debris szkript hozzáadása egy Rendered Fade szkriptet is hozzáadott. Ha a lövedék eltalálja az aszteroidát, annak el kell halványulnia ahelyett, hogy egyszerűen eltűnne. A szkriptnek csak egy Fade Time tulajdonsága van, ezt tegyünk 0.5-ös értékre.

A lövedék mozgásterének beállítása

Ha az aszteroida kirepül a képernyőről, akkor az űrhajóhoz hasonlóan teleportálódnia kell. A Scripts mappából ehhez a ScreenWrap szkriptet rá kell húzzuk az Asteroid-ra. Az űrhajóhoz hasonlóan itt is be kell állítani a megfelelő renderert.

Az aszteroidának van egy gyereke, a rockLP001. Ezt húzzuk a Asteroid GameObject ScreenWrap Renderers tulajdonságára:

Aszteroida beállítása

Az Asteroid-ot már csak a Prefab mappába kell húznunk, ami a Project ablakban található. Ha ezzel készen vagyunk, akkor az aszteroida példányát töröljük a Hierarchy-ból.

Az aszteroidáknak már csak kiindulási helyre van szükségük. Kattintsunk a Create gombra a Hierarchy-ban, és válasszuk ki a Create Empty opciót. Nevezzük el a lerakási pontot Debris-nek.

Fontos, hogy a lerakási pont azonos szinten legyen az űrhajóval, különben a játékos az aszteroida felett vagy alatt fog röpködni. Használjuk referenciaként a missle_R_0 nevű GameObject-et, amely a modell közepén található.

Húzzuk a Debris GameObject-et úgy, hogy az a missle_R_0 gyereke legyen. A transform koordináták így innentől a szülő GameObject-hez fognak viszonyulni. Ahhoz, hogy megegyezzenek a koordináták, a Debris pozícióját állítsuk be (0, 0, 0) értékekre. Ezzel a kis trükkel az űrhajó és az aszteroida azonos síkban lesz.

Következő lépésként mozgassuk a Debris-t a Hierarchy nézet aljára, ahol eredetileg is volt:

Transform

Mozgassuk a Debris GameObject-et jobbra. Ha esetleg nem sikerül teljesen egyforma helyre húzni őket, akkor az új pozíciójukat (20.0, 1.72, 7.06) értékre kellene állítani:

Pozíció beállítása

Amikor összeáll a kép

Minden elem konfigurálva van, így már csak a kirakó összerakása van hátra.

Kattintsunk a Create-en a Hierarchy nézetben, és válasszuk ki a Create Empty opciót. Inspector nézetben kattintsunk az új GameObject-en és nevezzük el GameManager-nek.

Legyen a GameManager kiválasztva a Hierarchy nézetben, így kattintsunk az Add Component gombon, válasszuk ki a Scripts-et, majd a GameManager-t. Észre fogjuk venni, hogy ez a művelet egy Audio Source elemet is hozzáadott. A GameManager-nek van még számos más mezője, melyeket be kell állítanunk ahhoz, hogy az aszteroidák megfelelően jöjjenek létre a játékhoz.

Kezdjük a Debris mezővel. Ügyeljünk arra, hogy a GameManager kiválasztása aktív legyen, és húzzuk az Asteroid Prefab-ot a Debris mezőbe. Itt mit is csináltunk tulajdonképpen? A GameManager felelős az Asteroid objektum létrehozásáért. A Debris mezőt használja annak eldöntésére, hogy milyen objektumot hozzon létre a játéktérben. A fenti művelettel azt adtuk meg neki, hogy ez az objektum az Asteroid Prefab.

A GameManager-ben több időzítő érték is állítható. A Min Time-ot állítsuk 2-re, míg a Max Time-ot tegyük 5-re. A szkript ezekből a mezőkből tájékozódik arról, hogy milyen gyorsan jelenjenek meg az aszteroidák. A Total Items on Screen értéket 5-re állítva pedig azt mondhatjuk meg, hogy maximum 5 aszteroida lehet a képernyőn, ezzel megakadályozhatjuk, hogy a játékost elsöpörje az űrtörmelék. Ezután húzzuk a Debris GameObject-et a Hierarchy nézetből a Screen Debris mezőbe. Ezzel a művelettel mondjuk meg a GameManager-nek, hogy az aszteroidákat a Debris GameObject-en hozza létre.

A GameManager komponens ezután a következőképpen néz ki:

GameManager szkript

Végezetül, az Audio Source komponensben adjuk hozzá a background-music zenét az AudioClip mezőhöz. Ügyeljünk rá, hogy a Loop be legyen pipálva, így a háttérzene folyamatosan ismétlődve szól játék közben.

Háttérhang beállítása

Indítsuk el a játékot, és nézzük meg, hogyan is működik az alkotásunk:

Elkészült a játék!

Gratulálunk! Elkészült az első Unity-s játékod.

Ez a sorozat csak a felszínt kapargatta meg, mégis remélhetőleg jó rálátást biztosít arra, hogy egy (akár bonyolultabb) játék elkészítése során milyen lépéseket kell megtennünk, mikre kell odafigyelni. A tapasztalat növekedésével pedig minden játékot fejleszteni vágyó egészen biztosan késztetést fog érezni arra, hogy saját szkriptekkel, igazán egyedi működésű programot alkosson.

Forrás: https://www.raywenderlich.com/770-introduction-to-unity-getting-started-part-2-2

Skeldar

0 válaszok

Hagyjon egy választ

Want to join the discussion?
Feel free to contribute!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük