A Unity kamera vezérlése

Az objektumok és más anyagok importálása, beállítása után egy másik fontos dologgal, az irányítással kell foglalkoznunk. Egy űrhajó nem túl hasznos, ha nem mozog, ezért ezt orvosolnunk kell. Ahhoz, hogy ezt megtegyük, két dolgot kell beállítanunk: az egyik a Unity kamera, a másik pedig a fizika. Szerencsére nem kell fizika órán éreznünk magunkat, mert a Unity sok dolgot levesz a vállunkról.

Először is be kell állítanunk az űrhajót. Válasszuk ki a Spaceship objektumot a Hierarchy nézetben, majd az Inspector-ban állítsuk a pozícióját X = 3.74, Y = 1.99 és Z = 10 értékekre. A rotációt tegyük X = 270, Y = 0 és Z = 0 értékekre, így ilyen ablakot kell kapnunk:

Transform

A Game nézetben még mindig úgy tűnik, hogy az űrhajó kicsit túl közel van a kamerához:

Kamera közelség

A Unity kamera alapvető módjai

Két megoldás létezik: vagy áthelyezzük az űrhajót, vagy konfiguráljuk a kamerát.

A Hierarchy nézetből válasszuk ki a Main Camera-t. A Camera komponens Inspector nézetben nagyon sok beállítást mutat. Számunkra most csak a Projection és a Field of View lesz érdekes:

Kamera komponens

Választhatjuk a Perspective vagy az Orthographic beállítást. Ez a választás alapvetően befolyásolja a játék kinézetét. A Perspective beállítás több tekintetben az emberi szemhez hasonlóan működik. Ha közelebb van egy objektum, akkor az nagyobbnak fog tűnni. Az Orthographic opció ezzel szemben figyelmen kívül hagyja a tér mélységét, melynek hatására a közel és távol lévő objektumok ugyanakkorának látszódnak:

2D vs 3D

Alapvetően egy 3D-s játéknak Perspective beállítást kell használnia, míg egy 2D-s játéknak Orthographic-ot.

Habár ez a játék tartalmaz 3D-s elemeket, a játékmenet tulajdonképpen 2D-s, ezért a Projection field-nél válasszuk az Orthographic-ot. A size 18.85-re való állításával pedig a Game nézet valami hasonló képet kell mutasson:

Javított hajó kamera

Az űrhajó irányítása

Egy űrhajónak repülnie kell, ugye? Ahhoz, hogy ezt megcsináljuk C# vagy UnityScript kódot kell írnunk a képkockánként történő mozgatáshoz. Szerencsére időt spórolhatunk, mivel a példafájlok tartalmaznak egy használatra kész szkriptet. A kérdés azonban az, hogy ezt hogyan kössük össze a hajóval.

A szkript csupán egy komponens, így számos módja van annak, hogy hozzáadjuk egy GameObject-hez. Több móddal is meg fogunk ismerkedni.

Válasszuk ki a Spaceship-et a Hierarchy-ból, majd válasszuk ki a Component/Scripts/Ship Controller szkriptet:

Unity kamera szkript hozzáadása a Unity-hez

Unity kamera szkript hozzáadása a Unity-hez

A Ship Controller szkriptet, mint Script komponenst hozzá is adtuk a Spaceship GameObject-hez az Inspector nézetben.

Hasonlóan a többi komponenshez, definiálhatunk mezőket a szkriptekben, amelyekhez hozzá tudunk férni a szerkesztőből. Ez lehetőséget ad arra, hogy a szkriptek tulajdonságait a játék futása során módosíthassuk:

Ship Controller

Állítsuk a Move Speed-et 22-re, a Rotation Speed-et pedig 2-re. A Move Speed a mozgás sebességét, míg a Rotation Speed az űrhajónk forgási sebességét írja le. Kattintsunk a Play gombon, így elindul a játék. Nyomjuk meg a nyíl gombokat, és figyeljük, ahogyan az űrhajónk elrepül a végtelenbe. Számunkra azonban ez nem túl jó hír.

Az előbbi módszerrel adjuk hozzá a ScreenWrap szkriptet is az űrhajóhoz:

Screen Wrap

A szkriptnek Renderers nevű mezői vannak. Ha a renderer nincs a képernyőn, akkor a GameObject-et a mozgás irányának megfelelő másik pozícióba teleportálja.

Nyissuk szét a Spaceship-et, keressük meg a body GameObject-et, majd húzzuk a body-t a Renderers mezőbe:

Unity Kamera screen Wrap beállítása

Unity Kamera screen Wrap beállítása

Most már szabadon repülhetünk anélkül, hogy kikerülnénk a kamera látóteréből:

Unity kamera repkedés az űrben

Unity kamera repkedés az űrben

Tetszett a post érdekel hogyan lehet játékot fejleszteni Unity-ben? Jelentkezz bemutató napunkra!

Bevezetés a fizikába

Az űrhajóval csak egy probléma van, mégpedig az, hogy megsérti a fizika törvényeit. A Unity íratlan törvényeit.

A Unity ütközésérzékelést használ. Ha egy GameObject-nek nincs RigidBody komponense, akkor static collider-nek számít. Ez azt jelenti, hogy ütközés esetén ez a test mozdulatlan marad. Ez jól jön optimalizációnál, hiszen ezeket a testeket nem kell mindig újraszámolni ütközésnél. Azonban mi repkedünk egy ilyen testtel, ezért a Unity-nek folyamatosan újra kell optimalizálnia, ami feleslegesen terheli a CPU-t.

Ezt elkerülendő, korrigálnunk kell a fizikai motor működését azzal, hogy egy RigidBody komponenst adunk hozzá. Most a Spaceship-et kiválasztva, az Inspector nézetben kattintsunk az Add Component gombon:

Komponens hozzáadása

A komponens menüből válasszuk ki a Physics/Rigidbody opciót:

Komponens hozzáadása

A komponensnek rengeteg opciója van, számunkra az Is Kinematic érdekes. Ez az opció azt állítja be, hogy manuálisan mozgassuk a GameObject-et, de továbbra is figyeljük az ütközéseket. Hasznos opció, ha szkript vagy animáció által akarunk mozgatni objektumokat.

Pipáljuk be az Is Kinematic opciót, de a Use Gravity elől szedjük ki a pipát, mivel nem számolunk gravitációval:

Az objektum ebben a játékban repked és mindenféle sziklra lő. Az ütközésérzékelés természetszerűleg nagy szerepet tölt be a játékban. Szükséges lesz tudnunk, hogy mikor lő a játékos egy aszteroidára, és mikor ütközik neki valaminek.

A Collider-ek figyelik és reagálnak az ütközésre. Számos ilyen collider létezik, lehetnek formák, mint például Sphere Collider vagy Box Collider. A Collider a 3D modell alakját is felveheti, hálóként illeszkedve rá. A collider zöld színnel jelenik meg a Scene nézetben:

Collider Scene nézetben

Ütközési felület beállítása

Válasszuk ki a Spaceship objektumot, és kattintsunk az Add Component gombon az Inspector nézetben. Adjuk hozzá a Physics/Sphere Collider-t, majd egy zöld kör jelenik meg a modell mögött:

Űrhajó Collider

De miért jelenik meg mögötte? Az űrhajó kicsit eltolódott az eredeti helyéhez képest.

A Sphere Collider-t kiválasztva az Inspector nézetben módosítsuk a Center tulajdonságot. Állítsuk be az X = 0, Y = 4.09, Z = -0.72 és a Radius = 3.14 értékeket. A végén pipáljuk be az Is Trigger mezőt. A Kinematic GameObject-ek nem tudnak normál ütközést regisztrálni, ellenben tudják figyelni azt, ennek függvényében képesek eseményeket indítani más objektumokból.

A Sphere Collider komponens most valahogy így néz ki:

Collider beállítások

A collider-nek pedig át kell ölelnie az űrhajót:

Űrhajó Collider

A továbbiakról

A kamera jó beállítása különösen fontos, erre a területre a jövőbeni játékainknál is fokozottan figyeljünk! Bátran kísérletezzünk az opciókkal a játék futása közben is. Ne felejtsük el, hogy nem tudjuk elrontani a dolgokat, hiszen leállítás után minden visszaáll az eredeti állapotra.

A következő részben pedig újabb izgalmakba vágunk bele: felfegyverezzük az űrhajónkat és telerakjuk az űrt lelőhető aszteroidákkal is!