Valósághű víz készítése

A Unity egy modern, elsősorban játékok fejlesztésére szánt motor, amellyel konzolra, számítógépre, web-re és mobil eszközökre készíthetünk alkalmazásokat. A célplatformok képességei több nagyságrendbeli eltérést mutatnak, ezért egy multiplatform játéknak minden platform teljesítményéhez jól kell tudni alkalmazkodnia. Az egyik ilyen számításigényes játékelem, amelyet szépre, mégis gyorsra kell beállítanunk, az a víz.

Cél

Amellett, hogy meg tudja dolgoztatni a gépet, a játékoknál egyben kulcselem is, ezért nem lehet kihagyni sok stílusnál teljesítményhiány esetén sem. A következő leírásban a Unity beépített lehetőségeivel ismerkedünk meg, amelyekkel remek minőségű vizet tudunk majd létrehozni, feltéve, hogy az alapanyagaink jók. Sajnos nem minden tökéletes. A Unity 2018-as verzióiban a water shaderek nem teljesen jól optimalizáltak, ezért csak akkor használjuk őket, ha nem mobil eszközre, hanem komolyabb teljesítményű platformra kívánjuk elkészíteni a játékunkat.

A Unity-vel háromféle vizet tudunk létrehozni:

  • Water Basic
  • Water Pro
  • Water4

A Standard Package-ben megtaláljuk a prefabokat, shadereket, szkripteket és a többi assetet, amelyeket használni fogunk. A leírás ezek alkalmazására fókuszál, de természetesen bármikor használhatunk szebb, jobb textúrát…

A víz készítésének előfeltételei

Érdemes mindig a legújabb verzióval kísérletezni, hiszen sosem tudhatjuk, mikor javítottak éppen az általunk használt funkciókon.

A kezdéshez mindenképpen szükségünk lesz egy nagyon egyszerű talajra, ahol a kis tavunkat elkészíthetjük. Érdemes a medret és a világítást valósághűen kialakítani annak érdekében, hogy lássuk, miként fest a vizünk egy valódi mederben, milyen az átlátszóság és a tükröződés.

Water Basic

A kép alapján készítsünk egy hasonló medret, amelyet aztán feltöltünk vízzel. Az első módszer a vízfelület létrehozására a Water Basic prefab.

Meder

A Project fülön nyissuk meg az Assets-et, és tallózzuk ki az Environment mappát. Ebben két water mappát találunk: egy Water-t és egy Water (Basic)-et. Elsőként a Water (Basic)-kel fogunk dolgozni. Lépjünk bele, és nyissuk meg a Prefabs mappát. Ezen belül található a WaterBasicDaytime és a WaterBasicNightime.

Water prefab

Mielőtt továbblépnénk, ismerkedjünk meg kicsit a prefabokkal. A prefabok gameobject sablonok. Segítségükkel hozhatunk létre új, egységes objektumpéldányokat. Ez azért hasznos, mert ha valamennyi objektumunkat módosítani akarjuk, nem kell egyesével átszerkesztenünk őket, elég csak a prefabot módosítanunk, és az összes objektumunk azonnal változik. Természetesen ettől még nem veszik el az a lehetőségünk, hogy egy-egy példányt külön módosítsunk.

Nevéhez hűen a WaterBasicDaytime-ot akkor érdemes használnunk, ha a scene nappali, míg a WaterBasicNightime inkább éjszakai scene-ekben fog jól mutatni. Mindkettő ugyanúgy működik, de a második egy kicsit sötétebb színvilágú. A példában mi a nappali változatot fogjuk használni. Válasszuk ki a prefabot az egérrel, és húzzuk be a scene-be (többé-kevésbé próbáljuk belőni a medret). Ezzel a lépéssel hozzá is adtuk a WaterBasicDaytime-ot a terephez.

Ha esetleg nem sikerült jól az elhelyezés, utólag még javítsunk rajta a Position és Scale állításával.

Water Basic vízfelület

Ha a víz megfelelő helyen van, vessünk rá egy pillantást, hogy mit is tudunk vele innen kezdeni. Ha megvizsgáljuk Inspector-ban, észrevehetjük, hogy egy Water Basic Plane (Mesh Filter) és egy Water Basic szkript van rá beállítva, míg shadere a vízfelületekhez használandó Water (Basic).

WaterBasicDaytime beállításai

A Mesh Renderer-ben számos paramétert állíthatunk, többek között azt, hogy vessen-e árnyékot (Cast Shadows) vagy fogadjon-e árnyékot (Receive Shadows). A Cast Shadows és a Receive Shadows opciókat kapcsoljuk be a vizünkhöz. Ugyanitt a tükröződést is beállíthatjuk. A szebb (és kevésbé gépigényes) tükröződés érdekében használjunk reflection probe-okat a Blend Probes And Skybox beállítással.

Mesh Renderer

A WaterBasicDaytime shader segítségével is beállíthatunk több paramétert, mint például a Wave scale vagy a Wave speed. Lehet velük játszani, de egyelőre hagyjunk mindent alapbeállításon.

Water (Basic)

Az eredmény megtekintéséhez helyezzük a kamerát egy jó pozícióba. A legkönnyebben ezt úgy tudjuk megcsinálni, ha a Scene nézetben beállunk a kívánt helyre, majd kiválasztjuk a Main Camera gameobjectet. A GameObject menüben ezután már használhatjuk az Align With View opciót, így a kamerát a Scene nézethez igazíthatjuk.

Water Basic eredmény

Innen már vissza tudunk menni, és megváltoztathatjuk a prefab beállításokat, hogy lássuk, melyik hogyan módosítja a kinézetet. Játsszunk a Cast Shadows, Wave scale és a Wave speed opciókkal.

Water Pro

A következőkben részletesebben megismerkedünk a Water Pro-val, de előtte töröljük a WaterBasicDaytime gameobjectet a scene-ből, hogy tiszta lappal kezdhessünk.

Első lépésként a Project nézetben nyissuk meg a Standard Assets-et, ezen belül az Environment-et. Lépjünk bele a Water mappába. Itt két almappát fogunk találni: Water és Water4. A Water Pro használatához először a Water mappát, majd ez alatt a Prefabs-ot kell megnyitnunk.

Water Pro prefabs

A Water Basic-hez hasonlóan itt is két prefabunk van: WaterProDaytime és WaterProNightime. Mindkettő ugyanúgy működik, de ahogyan a nevükből is következik, a WaterProDaytime inkább a nappali scene-ekbe illeszkedik, míg a WaterProNightime a sötétebb scene-ekben fog jól mutatni.

Mivel nappali scene-ben dolgozunk, ezért a WaterProDaytime-ot válasszuk ki. Húzzuk be a prefabot a scene nézetbe. Itt is előfordulhat, hogy szükség lesz a Position és a Scale korrekciójára.

Ha elég nagy tavat hoztunk létre, egyből szemmel látható a minőségbeli különbség a Water Basic-hez képest.

Water Pro tó

Amennyiben a víz már a helyén van, vessünk egy pillantást arra, hogy milyen opciókkal dolgozhatunk. Az Inspector-ban számos komponenst láthatunk: Mesh-t, Mesh Renderer-t, Water (Script)-et és egy Shader-t.

WaterProDaytime beállítások

A Mesh Renderer-ben az előzőekhez hasonló paramétereket tudunk állítani. Itt is kapcsoljuk be a Cast Shadows és Receive Shadows opciókat. A Reflection Probes-ot tegyük Blend Probes And Skybox állásba.

A Water szkript további opciókat vonultat fel, melyeket be kell állítanunk. Ezek az opciók nem érhetőek el az előző víztípushoz.

Water szkript

A Water Mode-ot átállíthatjuk Simple-re, ekkor a víz a basic water-hez hasonlóan fog működni. A Relflective opció esetén a víznek lesz visszatükröződése, de fénytörése nem. A Refractive beállítással a tükröződést és a fénytörést is bekapcsoljuk. A Disable Pixel Lights paraméterrel csökkenthetjük a világítás minőségét, ezzel növelve az FPS-t.

A Texture Size a generált víz textúrájának felbontását jelenti. A Clip Plane Offset egy távolságérték, amely arra vonatkozik, hogy a visszatükröződött kép milyen mélyen jelenjen meg. A Reflect Layers és a Refract Layers ugyancsak hatással van erre a megjelenítésre. Ezek a rétegek szabályozzák, hogy mely scene objektumok legyenek láthatóak a vízben. Alapértelmezetten minden aktív.

A Shader komponensben tudjuk változtatni a Wave Scale-t, Reflection-t és a Refraction Distort-ot. Ezen beállítások módosítják a hullámok látszólagos méretét és a hatásukat a visszavert és megtört objektumokra. A Reflective Color a víz alatt lévő tárgyak árnyalatának beállítására szolgál.

Ha megnyomjuk a Play-t, akkor láthatjuk a Water Pro-t akció közben. Ez sokkal valósághűbb, mint a Basic verzió, de a számításigényessége miatt megfontoltan használjuk.

Water Pro eredmény

Water4

A Water4 teszteléséhez töröljük ki az előbb elkészített tavunkat.

A Project nézeten belül nyissuk meg a Standard Assets/Environment/Water/Water4 mappát. Itt a Prefabs mappán belül láthatunk egy Water4Simple és egy Water4Advanced elemet. Ha mindkettőt megnézzük, látszólag egyformának tűnnek. De akkor mi a különbség?

Water4 prefab-ok

A különbség a használt material milyenségében rejlik. A fejlettebb változat tartalmaz egy Shore és egy Foam textúrát. Ezek a textúrák kerülnek rá a hullámokra és minden olyan helyre, ahol más objektum megtöri a wave mesh-t, mint például a part.

Válasszuk ki a Water4Advanced prefab-ot és húzzuk be a scene nézetbe. Állítsuk be a Position és Scale paramétereket, amennyiben szükséges.

Water4 tó

Figyeljük meg, hogy a Unity automatikusan létrehoz egy reflection scene gameobjectet, ha hozzáadjuk a prefabot. Ez a gameobject segít abban, hogy módosítsuk a tükröződést. A kamera komponens a reflection gameobjecten lehetővé teszi, hogy a Water4 visszatükrözze a scene-t.

Water4 beállítások

Válasszuk ki a Water4Advanced gameobjectet. Az Inspector-ban számos tulajdonságot látunk, amelyekkel testreszabhatjuk a látványt.

Water4 beállítások

Az első csoport a Water Base (Script) komponens, amellyel meghatározhatjuk a víz material jellemzőit. Megadhatjuk a Water Quality opciót, amellyel a víz minőségi szintjét állíthatjuk három fokozatban. Az Edge Blend bekapcsolása esetén a Water4 elmossa a water mesh széleit.

A következő komponens a Specular Lightning. Ez a szkript szabályozza a víz tükröződési képességét. Ha jobban megfigyeljük, ez tartalmaz egy referenciát a specular gameobjecthez. Ezt a paramétert használhatjuk arra, hogy bármilyen fényforrásra hivatkozzunk. Ilyen lehet például egy directional light transform.

A Planar Reflection a valós idejű, sík tükröződéshez használható. A tükröződések a mesh magasságához képest lesznek kiszámolva, amelyhez majd a szkriptet hozzáadjuk. Számos paramétert beállíthatunk még, mint például reflection mask, skybox tükröződés, de akár egy tiszta tükröződési színt is választhatunk. Az alapbeállítások itt is megfelelőek, így ezeket nem szükséges módosítanunk.

Az utolsó, Gerstner Displace komponenssel a hullámgenerálást szabályozhatjuk.

Összefoglaló

Ezek voltak hát a Unity vízfelületei! Megismerhettük őket az alapoktól, így már csak a paraméterezéssel való játék maradt hátra, hogy a lehető legszebb tavat hozzuk létre. Az Assets Store-ban további vízzel kapcsolatos asseteket is felfedezhetünk, amelyekkel tovább csinosíthatjuk tengereinket, folyóinkat.

Forrás: Tuts+

Skeldar

Textúrák, shader-ek és material-ok (2. rész)

Az előző részben megismerkedhettünk a textúrákkal és shader-ekkel, valamint a kapcsolódó munkamenetekkel. Megtudhattuk, hogy mire kell figyelnünk a textúrázásnál ahhoz, hogy elkerüljük a annak pontatlan illeszkedését. Kicsit elmélyedtünk a shader-ek világában is. A példákon keresztül bemutatva megérthettük azok funkcióit és tényleges hatásukat a modellekre.

A mostani részben az említett két alapelemből material-okat fogunk létrehozni, valamint bemutatjuk részletesen azok opcióit.

A material

A material tulajdonképpen csak egy tároló a shader-ünk és a textúránk számára. A modellekre közvetlenül a material-t tesszük, ezért például egy textúra soha sem fog direktben kapcsolódni egy modellhez, ahogyan azt talán elsőre gondolnánk.

A material konfigurációja legnagyobb részben az alkalmazott shader-től függ, de vannak olyan paraméterek is, amelyekkel shader-től függetlenül találkozni fogunk.

Új material létrehozása előtt javasolt készíteni egy Materials mappát. Jobb egérgombbal kattintsunk a Create/Material opción és adjuk meg az új material-unk nevét. Egy kevésbé komplex játék fejlesztése során is már sok material-lal fogunk dolgozni, ezért mindenképp informatív nevet válasszunk. Az alábbi képen két különböző shader-t használó material-t figyelhetünk meg. Észrevehetjük, hogy a Base Texture, Main Color, Tiling és az Offset paraméterek megtalálhatóak mindkét shader-nél, de a Shiny material azonban tükröződő felületek megjelenítésére kihegyezett shader-t használ, így ott ezen effekt beállítására találunk még néhány opciót. Az említett paramétereket a későbbiekben még részletesen bemutatjuk.

Shader beállítások

Shader-ek újratöltve

Most, hogy értjük a textúrák, shader-ek és modellek közötti összefüggéseket, ismerjük meg a normál shader-eket:

  • Diffuse: A Diffuse az alap material shader és egyben a legegyszerűbb is. A Diffuse shader-t használó modell felületén a fény egyenletesen oszlik el.
  • Specular: A Specular shader a modelleket fényessé teszi. Ha azt szeretnénk, hogy a modellünk sok fényt verjen vissza, ezt a shader-t alkalmazzuk.
  • Bumped: A Bumped shader-t általában más shader-rel együtt (pl. bumped-diffuse vagy bumped-specular) szokás használni. Ezek a shader-ek egy normal map-et használnak ahhoz, hogy a felület 3D-snek, göcsörtösnek vagy karcosnak tűnjön. Ennek a módszernek az óriási előnye az, hogy vizuálisan komplexebbnek tüntethetjük fel a modellünket anélkül, hogy a poligonszámot növelnénk.

Tetszett a cikk? Érdekel a játékfejlesztés? Jelentkezz iskolánkba!

Ha már kicsit jobban megismertük a beépített shader-eket, akkor ideje egy pillantást vetni a minden shader-nél fellelhető paraméterekre:

  • Main Color: A Main Color adja meg az objektum alapszínét. Ez nem változtatja meg magának az objektumnak a színét, ezzel az opcióval csak más árnyalatot adhatunk neki. Például, ha van egy modellünk kék textúrával és sárga main color-t állítunk be, akkor a modell nem fog sárgává változni, hanem zöld lesz. A Main Color opció csak egy másik színt kever az eredetihez, ezért lesz a kék és sárga kombinációjából zöld. Ha nem szeretnénk változtatni az eredeti textúrán, akkor ezt a paramétert állítsuk fehérre.
  • Specular Color: A Specular Color határozza meg a csillogás színét. Ezt érdemes fehérre állítani, hacsak nem szeretnénk, hogy a modellünk megvilágítás esetén más színnel csillogjon.
  • Shininess: A Shininess az objektum fényességének intenzitását állítja.
  • Texture: Itt adhatjuk meg az alkalmazandó textúrát.
  • Normal Map: A normal map képét állíthatjuk be ezzel a paraméterrel. Ez a kép ad göcsörtös megjelenést a modellünknek. Ez az opció igazán akkor hasznos, ha részletesebbnek akarjuk mutatni a megvilágított modellt, mint amilyen valójában.
  • Tiling: A Tiling adja meg, hogy a textúra milyen sűrűn ismétlődjön egy modellen. Külön állíthatjuk az ismétlődést az X és az Y tengelyen.
  • Offset: Az Offset szabályozza, hogy a modell élei és a textúra között mekkora rés legyen.

Egyszerű material létrehozása

Ha játszunk kicsit a paraméterekkel, gyorsan rá fogunk érezni, hogy a gyakorlatban mely opció mire is jó. Kis gyakorlás után ezek beállítása nagyon gördülékennyé tud válni.

Az alábbi módon készíthetünk egy nagyon egyszerű téglafalat:

  1. Indítsunk egy új projektet.
  2. Hozzunk létre egy Textures és egy Materials mappát.
  3. Keressünk egy téglafal textúrát az Interneten. Ügyeljünk rá, hogy a keresett kép ismételhető legyen, ezért a keresőben érdemes a tile kulcsszavat alkalmaznunk. A megtalált képet húzzuk az előző lépésben létrehozott Textures mappába.
  4. Adjunk egy Cube-ot a scene-hez. Pozícionáljuk a (0, 1, -5) koordinátákra. A Scale-t állítsuk (5, 2, 1)-re:
    Cube beállítások
  5. Hozzunk létre egy új material-t a Create/Material menüvel, majd nevezzük el például BrickWall-nak.
  6. A shader legyen az alapértelmezett Diffuse, de textúrának az előző lépésben kikeresett téglafal képét állítsuk be.
  7. Húzzuk a tégla material-t a cube-ra a scene nézetben.
  8. Figyeljük meg, hogyan teríti be a textúra a falat. A material Tiling paraméterével tudunk igazítani, ha esetleg nem lenne jó az elhelyezkedés.
  9. Adjunk Directional Light-ot a scene-hez a GameObject/Create Other/Directional Light menü segítségével. Állítsuk a pozíciót (0, 10, -10)-re és a Rotation-t pedig (30, 0 ,0)-ra.
    Téglafal

A végszó

Az előbbi műveletsor is megmutatta, hogy nem bonyolult dolog beállítani egy material-t. A nehézséget legtöbbször az adhatja, hogy megtaláljuk az ideális textúrát, shader-t, vagy normal map-et. Ha megvannak az elemek, a beállítások finomhangolása már a könnyebbik része lesz a munkánknak.

Forrás: Informit

Skeldar

Textúrák, shader-ek és material-ok (1. rész)

Egy játéktér a modellek sokaságából épül fel. Ezek a 2D-s vagy 3D-s objektumok a motorháztető alatt valójában több elemből épülnek fel. A játéktervező dolga beállítani ezen alkotóelemek paramétereit. A Unity egyszerű beállítási menete könnyen érthető és kezelhető, de ennek ellenére a grafikai megjelenést a végletekig testreszabhatjuk. Az objektumainkat ezen műveletsor mentén szétbontjuk alkotórészeikre, és mindegyikkel külön szekcióban foglalkozunk majd. Először talán furcsa is lesz, hogy a textúrát nem közvetlenül a modellre helyezzük, hanem a textúrák és a shader keverékéből készítünk el egy materialt, amelyet majd ráteszünk a modellünkre. Az efféle munkamenet előnye, hogy könnyen cserélhetővé válnak az alkotóelemek, így gyorsan és tisztán tudunk módosítani (akár futás közben) a paramétereken.

Munkamenet

Textúrák

A textúrák egyszerű 2D-s képek, amelyek “bőrként” vannak ráhúzva a modellekre. Nélkülük egy modell teljesen egyszínű, unalmas objektum lenne. Elsőre furcsa lehet egy 2D-s képet ráteríteni egy 3D-s modellre, de valójában elég egyszerű ez a folyamat. Vegyünk példának egy konzervet. A konzerv leszedett papírborítása tulajdonképpen olyan, mint egy textúra. Kinyomtatás után ráterítik a 3D-s konzervre, így az máris sokkal esztétikusabb látványt nyújt.

A Unity szerencsére nagyon megkönnyíti a projekthez való textúrák hozzáadását. Ha már adtunk hozzá más assetet, akkor a folyamat ismerős lesz számunkra. Érdemes egy mappát készíteni, melyet nevezzünk el például Textures-nek. Húzzuk bele a textúrának szánt képeket, és ezzel már készen is vagyunk.

A textúrák és konzervek kapcsán felmerülhet az a kérdés, hogy mi a helyzet a komplexebb objektumokkal? Ha összetett modellel kell dolgozzunk, akkor érdemes generálni egy unwrapet. Az unwrap nem más, mint egy térkép arról, hogy a majdani textúra hogyan fog rátapadni a felületre. A leírás ezzel a témakörrel részletesen nem foglalkozik, de az alábbi kép megtekintése után már sejthetjük, miről is van szó:

Unwrap

Előfordulhat, hogy egy textúra alkalmazása esetén az furcsán jelenik meg a felületen. Felhelyezés után elcsúszhatnak vagy akár el is fordulhatnak. Ez nem egy hiba. Ezt a jelenséget akkor tapasztalhatjuk, ha egy egyszerű, négyzetes textúrát akarunk rátenni a modellre. A modell nem tudja, melyik a helyes irány, ezért úgy alkalmazza, ahogy éppen esik. Elkerülhetjük ezt jelenséget, ha az adott modellhez (megfelelő unwrap szerkezettel) készült textúrát használunk. Ha grafikusokkal dolgozunk, akkor ők már eleve ennek megfelelően készítik el számunkra a 2D-s és 3D-s alapanyagokat.

Shaderek

A textúra meghatározza, mi legyen kirajzolva a felületre, míg a shader azt határozza meg, hogyan legyen mindez kirajzolva. A shader tulajdonképpen egy nagyon pici, GPU-n futó program, ami típustól és paraméterektől függően számolja ki, hogy milyen legyen a megjelenítés. A shader lehet kifejezetten vízfelülethez készült (részletesebben itt olvashatsz erről), vagy olyan, amely rajzfilmszerű megjelenítéshez passzol leginkább, de természetesen vannak általánosan használható shaderek is.

Előfordulhatnak olyan esetek is, hogy a már rendelkezésre álló shaderek számunra nem megfelelőek, mert esetleg valami nagyon egyedi és speciális megjelenítést akarunk adni a modellünknek. Ilyen esetben akár saját shadert is írhatunk, de ez már a játékfejlesztés egy komolyabb szintje, így ezzel a témakörrel ebben a leírásban nem foglalkozunk.

Egy material több paramétert és textúrát tartalmaz, a hozzá kapcsolt shader pedig alapvetően határozza meg, hogy a végén milyen felületet fogunk látni. Ez a valóságban nagyon egyszerű. Ha a materialokkal elkezdünk kísérletezni, egyből rá fogunk érezni, miről is van szó. Materialt nem is készíthetünk shader nélkül.

Egy kis gondolatkísérlet

Egyszerűen úgy érthetjük meg egy shader funkcióját, ha elképzelünk egy darab fát. A fizikai mivolta a fának a mesh. A színe és mintázata a textúra. Fogjuk meg a fát, és öntsünk rá vizet. Továbbra is ugyanabból az anyagból áll, de mégis máshogy néz ki. A fa kicsit sötétebb és fényesebb lett. A víz maga a shader. A shader az anyagot kicsit másmilyen kinézetűvé teszi anélkül, hogy változtatna rajta.

Az alábbi robot is remek példaként szolgál:

Shader példa

Az alkalmazott shader akár teljes egészében más hatásúvá teheti a materialt, így egy egyszerű shadercserével is tudunk új, különleges megjelenést létrehozni.

A továbbiakról

A leírás következő részében egybe fogjuk gyúrni a textúrákat és a shadereket, így új materialokat hozunk létre. Az egyik leggyakrabban látott illúziót is bemutatjuk, mégpedig azt, hogyan is tudunk egy valójában sima felületnek és textúrának göcsörtösséget, ezzel valósághűbb megjelenítést kölcsönözni.

Skeldar

Objektum mozgatás Unity-ben

Nem lenne játék a játék mozgó objektumok nélkül. Azt hihetnénk, hogy ez egy nagyon egyszerű dolog: csak arrébb kell tenni az adott objektumot minden képkockában. A gyakorlat egy kicsit más, több mozgatási módszer is létezik. Ez a leírás minimális programozási ismereteket feltételez, de a kezdők is el fognak tudni igazodni a szkriptekben.

Az alapok

Van egy objektumunk és egy 2D-s felületen, az X tengelyen szeretnénk jobbra/balra mozogni a nyíl gombokkal:

Objektum

    using UnityEngine;
    public class PlayerController : MonoBehaviour {
        Rigidbody rb;
        public float speed = 10.0f;
        void Start () {
            rb = GetComponent();
        }
      void Update () {
            if (Input.GetKey(KeyCode.RightArrow))
            {
                rb.velocity = transform.right * speed;
            }
        }
    }

Így mozog, ha megnyomjuk a jobbra nyilat:

Jobbra mozgatás

Valami nincs rendben! Ha jobbra akarunk menni, miért indul el balra egy idő után a golyó? Ennek az az oka, hogy a golyó vektorai együtt forognak az objektummal. Egy idő után a golyó átfordul, és a jobbra irányszámunkra máris balt jelent.

Rögzíthetjük a golyót, hogy ne forogjon, ha befagyasztjuk a forgását:

    rb.freezeRotation = true;

Miután a sebességet 2.0f-re változtattuk, és a fenti sort hozzáadtuk, ilyesmi eredményt kapunk:

Jobbra mozgatás

Ez már jobban néz ki, de még mindig javíthatunk rajta.

Balra is szeretnénk menni, ehhez kicsit módosítani kell a kódon:

    using UnityEngine;
    public class PlayerController : MonoBehaviour {
        Rigidbody rb;
        public float speed = 2.0f;
        void Start () {
            rb = GetComponent();
            rb.freezeRotation = true;
        }
      void Update () {
            if (Input.GetKey(KeyCode.RightArrow))
            {
                rb.velocity = transform.right * speed;
            }
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                rb.velocity = -transform.right * speed;
            }
        }
    }

Mivel nincs transform.left funkció, ezért a transform.right funckiót kell tükrözni, azzal hogy elé teszünk egy mínusz jelet.

A módosítások után már tudunk jobbra és balra is mozogni a golyóval. Amennyiben további dimenziókat szeretnénk hozzáadni a mozgáshoz, akkor a Z tengelyen történő elmozdulást kell kezelnünk, hogy a talaj mentén tudjunk közlekedni.

Az előre történő mozgáshoz a következő sort kell használnunk:

    rb.velocity = new Vector3(0, 0, 1) * speed;

Ez azt eredményezi, mint a fenti példa, de egy 3D-s vektort hív ehhez segítségül.

A teljes kód:

    using UnityEngine;
    public class PlayerController : MonoBehaviour {
        Rigidbody rb;
        public float speed = 2.0f;
        void Start () {
            rb = GetComponent();
            rb.freezeRotation = true;
        }
      void Update () {
            if (Input.GetKey(KeyCode.RightArrow))
            {
                rb.velocity = transform.right * speed;
            }
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                rb.velocity = -transform.right * speed;
            }
            if (Input.GetKey(KeyCode.UpArrow))
            {
                rb.velocity = new Vector3(0, 0, 1) * speed;
            }
            if (Input.GetKey(KeyCode.DownArrow))
            {
                rb.velocity = new Vector3(0, 0, -1) * speed;
            }
        }
    }

Mozgás minden irányban

A második módszer

Létezik alternatív megoldás is arra, hogy a golyót mozgassuk. Eddig a transform funkciókat használtuk, ami nem ad túl realisztikus mozgást. Az Input.GetAxis() használatával lehetőségünk van realisztikusabban mozgtani az objektumokat, mivel a nyers, “tedd odébb” parancsok helyett fizikai erővel hatunk az objektumokra, így idézve elő a mozgást.

    using UnityEngine;
    public class PlayerController : MonoBehaviour {
        Rigidbody rb;
        public float speed = 2.0f;
        void Start () {
            rb = GetComponent();
        }
      void Update () {
            float moveHorizontal = Input.GetAxis("Horizontal");
            float moveVertical = Input.GetAxis("Vertical");
            rb.AddForce(new Vector3(moveHorizontal, 0.0f, moveVertical) * speed);
        }
    }

Görgetés

A mozgatás RigidBody alapú, így ha módosítjuk a tömeget, a súrlódást, az hatással lesz a mozgatási képességre is.

A harmadik módszer

Egy másik lehetőség, hogy sebességet adunk a golyónak a fel/le nyilakkal, és forgatjuk a balra/jobbra nyilakkal:

    using UnityEngine;
    public class PlayerController : MonoBehaviour {
        public float movementSpeed = 5.0f;
        public float rotationSpeed = 200.0f;
        void Update () {
            transform.Rotate(0, Input.GetAxis("Horizontal") * Time.deltaTime * rotationSpeed, 0);
            transform.Translate(0, 0, Input.GetAxis("Vertical") * Time.deltaTime * movementSpeed);
        }
    }

Mozgó mosolygó labda

Két lehetséges megoldást kombináltunk, így kaptuk meg a harmadikat. A transform funciókat és a GetAxis()-t használtuk, amely kiszámíthatóbb mozgást tesz lehetővé, ezért ez jól használható például versenyzős játékok esetében.

A Unity-nek van egy beépített karaktervezérlője is, erre is érdemes egy pillantást vetnünk:

Karakter kontroller

A kód, amellyel WASD gombokkal tudunk mozogni:

    using UnityEngine;
    public class PlayerController : MonoBehaviour {
        CharacterController characterController;
        public float movementSpeed = 5.0f;
        private Vector3 moveDirection = Vector3.zero;
        void Start()
        {
            characterController = GetComponent();
        }
        void Update () {
            if (characterController.isGrounded)
            {
                moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical"));
                moveDirection = moveDirection * movementSpeed;
            }
            //Gravity
            moveDirection.y -= 10f * Time.deltaTime;
            characterController.Move(moveDirection * Time.deltaTime);
        }
    }

 

Ebben a megoldásban nem használjuk a RigidBody-t, így a gravitációt magunknak kell megírnunk.

Összegzés

A helyzettől függ, hogy melyik megoldást érdemes alkalmaznunk. Olyan esetben, amikor valaminek X idő alatt pontosan Y távolságot kell megtennie, kerüljük a fizikai erőkkel történő mozgatást, és inkább a transform paraméterek módosításával mozgassunk. A realisztikusabb mozgáshoz, amelyben a fizikát is alkalmazni akarjuk, az AddForce funcióval érdemes dolgoznunk.

Természetesen ezek nem kőbe vésett szabályok, lehetnek egy játékban olyan események is, amikor az AddForce alapú mozgatás a normál, míg bizonyos eseményeknél a velocity-vel kell operálni.

Forrás: Noob Programmer

Skeldar

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

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

Az előző részekben megismerkedhettünk a környezettel, ahol a játékprogramozás zajlik, most viszont eljött az idő, hogy valóban elkészítsünk egy játékot. A gyakorlás céljából elkészítendő játék egy nagyon egyszerű, űrhajós-lövöldözős játék lesz. A játékkészítés során a következő dolgokat fogjuk elsajátítani:

  • Project ablak használata, asset-ek importálása és rendezgetése
  • Különbség a GameObject-ek és a Prefab-ok között
  • Unity fizika
  • Kamerák működése, a nézetek típusai
  • A Unity-ben lévő anyagok alapjai

A játék előre elkészített asset-ekből fog felépülni, de a későbbiekben a saját asset-ek készítésével és szkriptek írásával is megismerkedünk. Ha majd mindennel elkészültünk, akkor valami ilyesmi eredményt kapunk:

Game nézet

Kezdjünk neki

Töltsük le innen a sample-files fájlokat. Három mappát tartalmaz a példa: asset-ek, modellek és induló projekt. Az előző részekben megismert módon megnyithatjuk a projektet.

Megjegyzés: A Unity-ben a projektek megnyitása kicsit másabb, mint a többi programban. Kattinthatunk a scene fájlon, vagy kiválaszthatjuk a projekt mappáját is a Unity böngészőjében.

Open project

Open project

A fájlrendszerben keressük meg a game assets mappát, és válasszuk ki a benne lévő összes fájlt, vagy húzzuk őket az Assets mappába a Project ablakon belül:

Importálás

Megjegyzés: Ha esetleg nem látszódik a Project ablak, akkor válasszuk ki a Window\Layouts\2 by 3 opciót.

Ha a Unity végzett az importálással, akkor valami hasonló ablakot kell látnunk:

Asset mappa

A Unity alapértelmezetten nagy előnézeti képeket használ, de ezen változtathatunk az alul lévő csúszka segítségével . Ez jól jön, ha sok asset-tel kell dolgoznunk:

Asset ikon méretezés

Észrevehetjük, hogy az összes asset egy helyre van ömlesztve. A nagyobb projektek esetén elengedhetetlen, hogy jól szét legyenek válogatva a különböző elemek, mellyel nagyon sok időt megspórolhatunk a fejlesztés során. A lényeg az, hogy a játék tényleges fejlesztésére minél több idő maradjon, és ne keresgéléssel töltsük azt.

A Project ablakon belül a Create-re kattintva, és a Folder opciót kiválasztva új mappát hozhatunk létre.

Mappa létrehozása

Nevezzük el az új mappát Materials-nak:

Mappa átnevezése

Készítsük el még a következő mappákat is, amelyek az asset-einket fogják tárolni:

  • Models
  • Prefabs
  • Scripts
  • Sounds
  • Textures

A Unity-ben lévő mappák úgy működnek, mint a fájlrendszer mappái. A fájlrendszer követi a Unity-ben lévő rendszert, így a Unity-n kívül is ugyanazon a helyen fogunk megtalálni mindent. E működés miatt érdemes a Unity-ben, nem pedig fájlrendszerben rendezgetni .

Ideje rendezgetni! Válasszuk ki a Bullet, Debris, GameManager, IonCannon, RendererFade, ScreenWrap és a ShipController szkripteket és húzzuk őket a Script mappába.

A background-music, explosion és shoot hangokat húzzuk a Sound mappába.

Végezetül a flint_like_rock_4787 textúrát mozgassuk a Textures mappába. Ha mindezzel megvagyunk, akkor a Project ablakunk hasonlóképpen néz ki:

Asset rendezés

Még mielőtt nekiesnénk a munkának, fontos megszokni, hogy rendszeresen mentsünk, mivel a Unity nem tartalmaz automata mentési funkciót.

A Unity a munkákat scene-ekbe menti. A scene lehet egy szintje a játéknak, de akár az egész játék is lehet egy scene. Ebben a lövöldözős játékban az utóbbi fog megvalósulni: minden egy scene lesz.

Mentsük el a játékunkat. Nevezzük el a scene-t Main-nek. A Save Scene ablak így néz ki:

Scene mentése

GameObject-ekkel és Prefab-okkal való munka Unity-ben

Mit ér a játékprogramozás játékos nélkül? Nézzünk bele a models/player mappába. Itt FBX fájlokat fogunk találni néhány képpel egyetemben.

Az FBX fájl tartalmaz minden adatot, ami a 3D-s modell elkészítéséhez kell. Ilyen például az animáció. A játékos fájlt, melyet a leírásban használunk, ComboMash készítette a Hextraction játékához.

Válasszunk ki minden fájlt a player mappából, és húzzuk őket az Assets mappa tetejére, a Project ablakba. Ezután valami ilyesmit kell lássunk:

NormalMap settings

Néhány képformátum extra információt hordoz, habár szokványos formátumúak. A p_pod_normal.jpg például tartalmazza a felület mélységét, amely felszíni világításhoz nyújt információt anélkül, hogy bármilyen más geometriát kelljen ehhez létrehozni. Ezt normal map-nak nevezzük.

A Unity azonban azt hiheti, hogy normál képpel dolgozik. A Fix Now gombra kattintva beállíthatjuk, hogy a Unity ezt normal map fájlként kezelje.

Miután importáltuk a játékos fájlokat, húzzuk a hextraction_pod asset-et a Scene nézetbe az alábbi módon:

Ship hozzáadása a Scene-hez

El is készült a modell első példánya. A Unity helyesen importálta a textúrát és helyezte rá a modellre.

A Hierarchy nézetben pedig megjelent egy új GameObject:

Ship Hiererchy

Ahogyan az előző részekben olvasható volt, a Hierarchy nézetben minden elem egy adott típusú GameObject. A GameObject maga tartalmaz egy transform adatot, amely a pozíciót, méretet, forgási adatot foglalja magába:

Transform

A GameObject-et úgy tudjuk testreszabni, hogy Components-et adunk hozzá. A komponensek képviselik a GameObject viselkedését és megjelenítését.

A világítási komponens hozzáadásával például -nem meglepően- fénybe boríthatjuk a GameObject-et. Az Audio Source komponens segítségével a GameObject hangot bocsájthat ki. Saját komponenseket is írhatunk és adhatunk a GameObject-ekhez, ha nagyon egyedi dolgot szeretnénk.

A GameObject-ek tárolóként is funkcionálnak. Az Alt nyomva tartásával, a kis háromszögre kattintva a hextraction_pod-on kinyitjuk az objektumot:

Hierarchy fa

Legtöbbjük üres GameObject, amely a modell struktúráját képviseli. A Unity készíti el ezeket a GameObject-eket, amikor egy modellt importálunk. A többi GameObject, mint például a pod_mesh gyerekei, tartalmaz egy Skinned Mesh Renderers komponenst, amely egy geometriát jelenít meg a képernyőn.

Azt is észrevehetjük, hogy némely GameObject a Hierarchy nézetben feketén, némely pedig kéken van jelölve:

Ship Hiererchy

A fekete jelölés a normál GameObject-et jelöli, míg a kék azt mutatja, hogy a GameObject egy Prefab-bal a többi objektumhoz kapcsolódik. Amennyiben a GameObject barna színűre vált, az azt jelenti, hogy elvesztette a Prefabbal való kapcsolatot.

A Prefab lehetővé teszi, hogy úgy mentsük le a GameObject-eket, hogy azok  kódból vagy a Scene nézetbe való behúzással könnyen duplikálhatóak legyenek. Hasonlóak a sablonokhoz, azzal a különbséggel, hogy a Prefab-ok kapcsolódnak egymáshoz. Ha módosítjuka Prefab-ot, akkor minden példány módosul.

Ha van egy Prefab példányunk a Scene nézetben, akkor bárhogyan testreszabhatjuk. Lesz olyan, amikor a módosításokat a már létező Prefab-okon akarjuk elvégezni, és lesz olyan is, amikor mindent vissza akarunk állítani az eredeti állapotára, mert nem jöttek be a változtatások.

Válasszuk ki a hextraction_pod-ot a Hierarchy nézetben. Az Inspector ablakban három gombot láthatunk: Select-et, Revert-et és Open-t:

Prefab vezérlők

A Select lokalizálja a Prefab-ot a Project ablakon belül. Ez különösen hasznos, ha az elemet egy komplex mappastruktúrában nem a megfelelő helyre tettük le.

Ha változtatunk egy Prefab-on, akkor az Apply gombbal azonnal módosíthatjuk az összes példányt. A Revert gomb visszavonja az egy példányon eszközölt változtatásokat, visszaállítja az eredeti állapotot. Az Open pedig megnyit egy modell fájlt, amit valamilyen szerkesztőben készítettek (például Maya vagy Blender).

Jelenleg a játékos hajója alatt egy rácsozat van, ami furán néz ki. Válasszuk ki tile_reference GameObject-et a Hierarchy nézetből. Ez a közvetlen leszármazottja a hextraction_pod GameObject-nek.

Megjegyzés: A gyorskeresőbe beírva a GameObject nevét, villámgyorsan megtalálhatjuk az objektumunkat.

Prefab keresés

A tile_reference-et kiválasztva töröljük a rácsozatot. A Unity egy figyelmeztetést fog feldobni:

Unity figyelmeztetés

A Unity minden olyan esetben jelezni fog, amikor egy változtatás megtöri a Prefab-ok kapcsolatát. Mivel pontosan ezt akarjuk tenni, ezért kattintsunk arra, hogy Continue. A hextraction_pod feketére fog váltani, jelezve, hogy az elemből egy hagyományos GameObject lett:

Prefab

A hextraction_pod-on történő jobb kattintás után válasszuk ki a Rename opciót, és nevezzük át a GameObject-et Spaceship-re.

Húzzuk a Spaceship-et a Prefab mappába a Project ablakon belül:

Prefab létrehozása

Behúzva a GameObject-et a Project ablakba, az automatikusan átkonvertálódik Prefab-bá. Annyi űrhajót tehetünk így a játékba, amennyit csak szeretnénk, úgy, hogy csak behúzzuk őket a Scene nézetbe. Jelenleg ez csak lemásolja a modellt, de a későbbiekben tartalmaz majd szkripteket, hangokat és még sok mást is. Amint azt láthajtjuk, a Prefab-ok nagyon hasznosak:

Prefab duplikálás

Már csak egy kis időt kell szánnunk arra, hogy a Project ablak átlátható maradjon. Az Assets mappán való kattintással megjeleníthetjük annak tartalmát. Tegyük a hextraction_pod-ot a Models mappába, a p_pod_ fájlokat pedig a Textures mappába. Végezetül ne felejtsünk el menteni!

A továbbiakról

A játékprogramozás bemutatását szolgáló sorozat következő részében egy másik izgalmas elemmel, a kamera beállításával fogunk megismerkedni. Hiszen mit ér egy játék, ha nem látunk belőle semmit?

Skeldar

Kezdők bevezetése a Unity-be (3. rész)

Az előző részben megismerkedhettünk a játékkészítés egyik legfontosabb elemével. Megtudtuk, hogyan helyezhetünk el és konfigurálhatunk objektumokat a játéktérben. A mostani részben pedig megtudhatjuk, hogyan próbálhatjuk ki az alkotásunkat, valamint bónuszként górcső alá vesszük a szerkesztő további extra funkcióit is.

7. Játékgombok

A játékgombok teszik lehetővé, hogy elindítsuk és leállítsuk a játékunkat. Az első gomb a Play:

Play gomb

Több dolog is történik, ha rákattintunk a Play-re. Először is elindul a játékunk, várakozásunknak megfelelően. A vezérlőgombok azonban kékre váltanak, ha a játékunk fut:

Játékvezérlők

Az egész játéktervezői tér is fakóbb lesz:

Unity szerkesztő

Fontos megjegyezni, hogy minden, a játék futása közben eszközölt változtatás elveszik a játék leálltával. Gyakori hiba, hogy a Unity-ben fejlesztők sok módosítást végeznek el futásidőben, majd egyszer csak azt veszik észre, hogy minden elveszett. A tervezői terület fakóbbá válása egy jó jelzés lehet, de sajnos nem túl nagy a színeltérés, így néha el lehet felejtkezni arról, hogy futásidőben vagyunk.

Szerencsére a Unity ad lehetőséget arra, hogy állítsunk az árnyalatokon:

Nyissuk meg a Unity Preferences ablakát.
Válasszuk ki a Colors fület a bal oldalon, és állítsuk be a kívánt színt:

Unity Colors

Playmode-ba való lépésnél így már elég feltűnő lesz a különbség:

Játékmód színek

A következő a Pause gomb:

Pause gomb

Ez a gomb szünetelteti a játék futását, és lehetőséget ad arra, hogy módosításokat végezzünk el. Ezek a módosítások azonban a játék leállításakor ugyancsak elvesznek. Az ilyen ideiglenes módosítások azért hasznosak, mert a játékkészítés sok kísérletezéssel jár, és itt nyugodtan próbálkozhatunk. Bármit módosítunk, a játékunk vissza fog állni alapállapotra.

A harmadik hasznos gomb a Step:

Step gomb

A Step gombbal képkockánként léptethetjük a játékot. Nagyon hasznos, amikor az animációkat a lehető legalaposabban meg akarjuk vizsgálni, vagy ha egy adott GameObject állapotát akarjuk ellenőrizni a játék folyamán:

Léptetés

8. Egyéb szerkesztői beállítások

A játékkészítés folyamata gyakran több fejlesztő munkájának összehangolását is szükségessé teszi. Az első a Collab menü, amely ezt hivatott segíteni:

Collab menü

A Unity új szolgáltatása lehetővé teszi, hogy nagy csapatok dolgozzanak egy projektben.

A következő gomb a Service, amellyel különféle szolgáltatásokat adhatunk a Unity játékunkhoz. Az opció használatához Unity Project ID szükséges:

Unity Services

A Project ID hozzáadása után különböző szolgáltatásokkal bővíthetjük a programunkat. Például felhő build-et adhatunk a projekthez, amely automatikusan build-eli a projektet, így nem kell minden egyes build-re várni. Hozzáadhatjuk még az Analytics, In-Game Ads, Multiplayer támogatást, illetve az In-App Purchasing, Performance Reporting és Collaborate opciókat is.

Csapattagokat is felvehetünk, emellett korhatárt és más fontos dolgokat állíthatunk be.

A következő az Account gomb, amellyel a Unity profilunkat kezelhetjük. Átnézhetjük a beállításainkat, ki-és beléphetünk vagy upgrade-elhetünk:

Account menü

A negyedik gomb a hasznos Layers:

Layers menü

A Layers segítségével a szerkesztői nézethez különböző kiosztásokat készíthetünk, menthetünk és tölthetünk be. A Unity nagyon jól testreszabható, minden dokkolható, átméretezhető, elrejthető:

Ezen funkció segítségével egy adott munkafolyamathoz legjobban illeszkedő nézetet készíthetjük el. Például az animációkkal való munkához nem kell feltétlenül megnyitva lennie a Game nézetnek, de az Animator és Animations nézeteket biztosan szeretnénk látni.

Újrarendezni a szerkesztőt időrabló, de a Layout-tal szerencsére gyorsan válthatunk.  Egy új ablak megnyitása és beállítása nagyon könnyű:

Layout menü

Észre fogjuk venni, hogy a fejlesztés során számos nézetre lesz szükségünk. Ez a sorozat igyekezett a legfontosabbakat bemutatni, viszont ezeken kívül sok másik létezik még. A részletes leíráshoz érdemes a Unity dokumentációhoz fordulni.

Hogyan tovább?

A játékkészítés legizgalmasabb része következik: a játékkészítés maga! A következő részben az elméletet átültetjük a gyakorlatba, és egy kicsi, űrhajós-lövöldözős játékot fogunk megalkotni. A megtanult technikáknak nagy hasznát fogjuk venni. Ha jól megismertük a fejlesztői környezetünket, akkor nagyon gördülékeny lesz a játékkészítés.

Skeldar

Kezdők bevezetése a Unity-be (2. rész)

A Unity-s játékfejlesztés folyamatát bemutató cikksorozat első részében a telepítésről, az asset-ekről, a GameObject-ekről és magáról a felületről általánosan olvashattunk. A játékfejlesztői munka jelentős része azonban az asset-ek importálása és a GameObject-ek behúzása után történik, ezért érdemes ezen ablakok kezelését a lehető legalaposabban elsajátítani.

5. Inspector ablak

Inspector ablak

Az Inspector ablakban konfigurálhatjuk a GameObject-eket. Ha kiválasztunk egyet a Hierarchy nézetben, az Inspector minden tulajdonságot kilistáz, ami az adott objektumra vonatkozik . Ez az objektum adatlapja. A játékfejlesztés során itt állítjuk be az indulási adatokat, de az adatlapon szereplő értékeket játék közben is módosíthatjuk, így például az is megvalósítható, hogy menet közben egy-egy objektum más színnel kezdjen el világítani.

6. Eszköztár

A játékfejlesztés elengedhetetlen kelléke az eszköztár, amely segítségével módosíthatjuk a GameObject-eket a scene-ben. Nagyon sokat fogjuk ezt használni, hiszen az üres scene-t fel kell tölteni, és az elemeket el kell rendezni. Gyakorláshoz helyezzünk el egy kockát:

GameObject menü

  • Nyissuk le a GameObject menüt
  • Válasszuk ki a 3D Object opciót
  • Válasszuk ki a Cube objektumot

Megjegyzés: Ha elveszítjük a kockát a manőverezés közben, akkor a Hierarchy nézetben a Cube objektumon duplán kattintva visszavihetjük a scene néztet a kockára.

A Hand nevű eszköz egy kéz, amellyel megfoghatjuk és mozgathatjuk az objektumokat:

Unity eszköztár

Unity eszköztár

Jobb egérgombbal a kéz ikon egy szemmé alakul, és ilyenkor magát a kamera nézőpontját változtathatjuk:

Unity eszköztár

 

A Ctrl (vagy Cmd) vagy Alt (vagy Option) és a jobb egérgomb lenyomásával, majd az egér mozgatásával a nagyítást állíthatjuk be. Az egér felfelé mozgatásával közelíthetünk a scene-ben, míg a lefelé való mozgással távolodhatunk. Egyszerűbb, ha az egér görgőjét használjuk.

Unity eszköztár

Tartsuk lenyomva a jobb egérgombot, így a WASD gombokkal is mozoghatunk a scene-ben, mintha csak egy FPS játékban lennénk. Fölfelé és lefelé is mozoghatunk az E és Q gombok segítségével. Számos FPS játékhoz hasonlóan, a Unity Scene nézetében is  gyorsabban mozoghatunk, ha a Shift-et nyomva tartjuk:

Unity eszköztár

A Hand alapértelmezett gyorsbillentyűje a Q. A kéz eszközhöz való gyors ugráshoz nyomjuk meg a középső egérgombot, melyet elengedve visszatérünk az ezt megelőzően használt eszközhöz.

A Translate eszközzel kiválaszthatjuk és pozícionálhatjuk a GameObject-et a scene-ben.

Unity eszköztár

Ha a Translate aktív, és kiválasztunk egy GameObject-et, akkor három nyíl jelenik meg az objektum közepéből kiindulva. A három nyíl a 3D-s tér három tengelyét jelenti. A piros az X, a zöld az Y és a kék a Z tengely.

Unity eszköztár

A Unity koordinátarendszere balkezes. A bal-és jobbkezes koordinátarendszer közötti különbség alapvetően a Z tengely iránya. A két rendszert az alábbi példa szemlélteti:

Koordináta-rendszerek

Megjegyzés: A három különböző színű nyilat a Unity nyelvezetében gizmónak nevezik. A gizmó egy 3D geometria vagy textúra, amely információt szolgáltat a GameObject-ről. Ebben az esetben a gizmó a három tengely irányát mutatja. Miután egyre jobban elmélyedünk a Unity-ben, akár saját gizmókat is készíthetünk, amelyek például mutathatják a starthelyet, a kamera helyét, a szélirányt stb. A gizmók egyik remek tulajdonsága még, hogy csak a Scene nézetben láthatóak, és kikapcsolhatóak, ha már nincs rájuk szükség.

Sok lehetőségünk van arra, hogy a Translate eszközzel mozgassuk a GameObject-eket. Kiválaszthatunk egy nyilat, és az egeret mozgatva csak az adott tengelyen toljuk el az objektumot. Például, ha a GameObject Y tengelyét választjuk ki, és a scene-t normál szögből nézzük, akkor az egérrel fel és le tudjuk mozgatni az elemet.

GameObject tengelyek

A három különböző színű lap a GameObject közepén arra hivatott, hogy az objektumot egy adott síkban tudjuk mozgatni. Ha például a zöld lapot fogjuk meg, akkor az X és Y tengelyek mentén tudjuk helyezgetni a GameObject-et:

Unity eszköztár

A Translate eszköz alapértelmezett gyorsbillentyűje a W.

A Rotate eszköz -nem meglepően- az objektumot forgatását teszi lehetővé:

Unity eszköztár

Ha kiválasztjuk ezt az eszközt, három körvonalat fedezhetünk fel, melyek mentén az adott elem forgatható:

GameObject forgatási tengely

Egyszerűen csak válasszunk ki egy vonalat, és kezdjük el mozgatni az egeret, hogy a GameObject is elforduljon. A tengelyhez való kötöttség nélküli forgatáshoz a vonalak közötti üres teret válasszuk ki:

Unity eszköztár

A Rotate eszköz alapértelmezett gyorsbillentyűje az E.

A Scale eszközzel a GameObject-et méretezhetjük át egy, vagy az összes tengely mentén.

Unity eszköztár

Egy tengelyen való átméretezéshez fogjuk meg a tengely végén lévő színes kockát. Az összes tengelyen való méretezéshez a GameObject közepén lévő kis kockát kell megragadjuk:

GameObject tengelyek

A Scale eszköz alapértelmezett gyorsbillentyűje az R.

Megjegyzés: Elsőre kaotikus lehet a gyorsbillentyűk kiosztása. Jobb lenne, ha a Scale S lenne R helyett. Valójában a látszólagos káoszban van rendszer: a billentyűzeten az eszköztár sorrendjében következnek egymás után a gombok, amit az alábbi ábra jól szemléltet:

Unity eszköztár

A Unity feltételezi, hogy az egeret a jobb kezünkkel fogjuk, míg a ballal a billentyűzetet kezeljük, az ujjainkat pedig általában a WASD környékén tartjuk a játékfejlesztés során:

Unity gyorsbillentyűk

Ebből a pozícióból a QWERT gombokat könnyedén elérjük. Sajnos néha előfordulhat, hogy W helyett a 2-est nyomjuk meg. Ilyenkor a szerkesztő 2D-s módba vált át:

Unity eszköztár

Ha ez megtörténik, csak nyomjuk meg újra a 2-est, és visszaáll az előző mód.

A Rect eszközre általában csak 2D-s GameObject-ek és User Interface-ek (UI) esetén van szükség, habár 3D-s objektumoknál is látni lehet.

Unity eszköztár

Ezzel az eszközzel lehetőségünk van átméretezni, igazítani, forgatni a 2D-s asset-eket, de a forgatási pontot is módosíthatjuk vele. A forgatási pontot egy nagy köz jelzi az asset körül:

Unity eszköztár

Az eszköz alapértelmezett gyorsbillentyűje a T.

A gizmó megjelenítés kis zavart okozhat. Ezek nem csupán gombok. Inkább kapcsolók, amelyek a gizmók pozícionálást hivatottak vezérelni.

Az első ilyen kapcsoló a Center és Pivot mód közötti váltást szolgálja. Center módban két GameObject-et választhatunk ki, így a gizmó a két objektum közé kerül. A GameObject-eket ebben a módban a közbenső pont körül forgathatjuk. Pivot módban minden GameObject a saját, belső forgatási pontja körül fordul el:

Unity gizmó

A második kapcsoló a Global és Local mód között vált. Global módban az objektumot az azt körülvevő világ szemszögéből módosítjuk. Az X tengely megy balra-jobbra, az Y megy fel és le, míg a Z tengely előre és hátra. A Local mód az objektum belső koordináta-rendszerét veszi alapnak, a tengelyek e szerint módosulnak.Global-Local

A játékfejlesztés eszközeinek fontossága

A játékfejlesztés ezen eszközeinek alapos begyakorlása kiemelten fontos. Nagyon sokat fogjuk használni őket, érdemes készségszinten elsajátítani a használatukat. A cikksorozat következő részében a másik igen fontos és gyakran használt elemmel, a Play gombbal és társaival ismerkedünk meg. Levezetésképpen pedig betekintünk az interfész testreszabásába és a Unity kollaborációs lehetőségeibe. Az előbbi igen fontos az egyéni munkánk elősegítése miatt, az utóbbit pedig jó ha alapszinten megismerjük, hiszen az igazán nagy játékok szinte mindig csapatmunkából születnek!

Skeldar

Kezdők bevezetése a Unity-be (1. rész)

A játékfejlesztők többségéről elmondható, hogy akkor kaptak kedvet saját játékok készítéséhez, amikor maguk is kapcsolatba kerültek különböző videojátékokkal. A hordozható telefonok  terjedésének köszönhetően egyre többen adták mobilra történő játékfejlesztésre a fejüket, melynek pozitív hozadékaként ma már számtalan szórakoztató mobilapplikáció közül válogathatunk. A Unity szintet lép, és még könnyebbé teszi a fejlesztők életét. Ez a bevezetés egy összefoglaló arról, miért, és hogyan érdemes belevágni a játékfejlesztésbe.

A mobil és számítógépes platformra való fejlesztés kezdetben nehézkes volt, ami sokakat már az első lépéseknél elriasztott. Szerencsére manapság már léteznek vizuális szerkesztőprogramok, az egyik ilyen élvonalbeli eszköz a Unity, mellyel számítógépre és mobilra is készíthetünk játékot. Egy játék sem lehet teljes grafikai elemek nélkül: a Unity-hez léteznek kész grafikák, animációk, effektek és más elemek, melyeket “assets”-nek nevezünk. Az Asset Store-ban rengeteg lehetőség közül válogathatunk, számos kiváló ingyenes és fizetős Asset Package-t találhatunk, amelyek egy adott téma köré épülnek (pl.: platformjátékhoz szükséges elemek), így egyből nekikezdhetünk a fejlesztésnek. Csaknem 30 platform támogatásának köszönhetően -ideértve a mobilokat, VR-t, asztali gépeket, konzolokat- az eszközök széles skáláját érhetjük el játékainkkal.

 

Unity-LEGO hasonlat

A Unity egy fantasztikus moduláris megközelítést használ, amikor a scene-ek, karakterek megalkotásáról van szó. Még kezdők is képesek remek űrhajót építeni az alap LEGO kockákkal, ez a Unity-ben sincs másképp. A kifinomultabb alkotáshoz lehetőségünk van teljesen testreszabni majdnem minden komponenst. Írhatunk saját shadert, vagy készíthetünk egészen új hálózati modult is a játékunkhoz.

A leírás  teljesen kezdők számára készült, hogy minél könnyebben átlássák a Unity környezetet és eszközöket. A későbbiekben részletesebben is szemügyre vesszük a különböző alrendszereket.

Az alábbiakkal fogunk megismerkedni:

  • Unity telepítése, és a verziók közötti különbségek tisztázása
  • Interfész különböző nézetei
  • Navigáció a Scene nézetben
  • GameObjects és Components hozzáadása és manipulálása

A későbbiekben pedig egy kicsi, űrbéli lövöldözős játékot fogunk készíteni, hogy a gyakorlatban is megismerjük a Unity adta eszközöket.

A kezdet

Első lépésként le kell töltenünk innen a Unity-t. De várjunk csak! Három különböző verzió is létezik. Melyikre van szükség?

A Unity motor minden verzióban ugyanazon funkciókkal van felszerelve. A Personal ingyenes, a Plus $25, míg a Pro $125 havonta. A legszembetűnőbb különbség a Unity indulókép, amelyet csak fizetős verziókkal távolíthatunk el vagy cserélhetünk sajátra. Számos kisebb-nagyobb eltérés van még, ezeket itt részletesen megtaláljuk.

Az oktatóanyagokhoz elegendő a Personal változat , de mielőtt elkezdenénk fejleszteni a következő, játékpiacot letaroló programunkat, olvassuk el a részletes tájékoztatót, mivel a Personal verzió rendelkezik pár megkötéssel.

Maga a telepítés nagyon egyszerű, ‘Next’-‘Next’-‘Finish’ után a következő kép fogad minket:

Unity regisztráció

A regisztráció után nem szükséges mindig bejelentkeznünk, offline mód használatra is van lehetőségünk.

A bejelentkezés után a következő kép fogad minket:

Unity új projkt

Kattintsunk a New Project gombon, amely egy párbeszédablakot hoz elő:

Unity projekt beállítások

  • Nevezzük el a projektet Space Debris-nek, és válasszunk egy helyet ahova el akarjuk menteni.
  • A 2D/3D opció meghatározza a kezdeti konfigurációt. Itt még az analitikát is bekapcsolhatjuk, amennyiben szeretnénk. Ezeket a beállításokat később is megváltoztathatjuk.
  • Az Assets packages gombbal egyedi csomagokat importálhatunk a projektbe. Például, ha FPS játékot szeretnénk készíteni, akkor érdemes a Unity first-person controller csomagját importálni. Ez egy kényelmes funckió a projekt elindításához, de a későbbiekben is bármikor importálhatunk csomagokat. A leíráshoz nincs szükség semmilyen alap asset-re.
  • Unity Analitics-et nem szükséges bekapcsolni.
  • Kattintsunk a Create project-re, és a Unity megnyitja az első projektünket.

Bevezetés az interfész felépítésébe

A Unity indulása után valami hasonló kép jelenik meg:

Unity interfész bevezetés

A felület előszőr nagyon összetettnek tűnhet (és verziótól függően kis mértékben eltérhet), de valójában teljes mértékben testreszabható annak érdekében, hogy csak azt lássuk, ami tényleg szükséges. Annyi információt jeleníthetünk meg, amennyit szeretnénk.

 

Nézetbeállítás

jobb felső sarokban öt gombot láthatunk. Válasszuk ki a ‘2 by 3’ opciót. A szerkesztő ennek hatására hasonló módon alakul át:

Unity interfész

 

1. Scene nézet

A bevezetés az interfész felépítésébe a Scene nézettel indul, amelyben a játék elemeit készítjük el, ide helyezzük el a modelleket, kamerákat és a többi elemet. Mindent vizuálisan kezelhetünk ebben a nézetben, ez maga a ‘színpad’.

Scene nézet

Tesztelés során a scene a játék állapotától függően módosul, menet közben akár újabb elemeket is hozzáadhatunk. Ha megállítjuk a játékot, a scene visszatér az alapállapotába: minden, játék során végzett módosítás elveszik.

2. Game nézet

A Game nézet a játékos szemszögét mutatja. Ez az a nézet, ahonnan játszani lehet a játékot, itt láthatjuk, mi hogyan működik:

Game nézet

Ez a nézet rendelkezik egy képarányt beállító menüvel. Különböző képernyőtípusokon is ellenőrizhetjük, mit is fog látni a játékos. Ez az opció azért is fontos, mert egy táblagépen vagy telefonon egész más látványt kapunk, mint számítógépen, ezért ehhez a nézethez is hozzá kell igazítani a játékot (feltéve, ha mobil változat is készül belőle).

 

Képarány

3. Hierarchy nézet

Hierarchy ablak tartalmazza a játékunk által használt összes GameObject-et. De mi az a GameObject? A GameObject egy objektum a játékban. Tulajdonképpen olyan üres konténerek összessége, melyekbe komponenseket tehetünk és testreszabhatunk.A komponensek lehetővé teszik, hogy a GameObject alakot vegyen fel, legyen az egy egyszerű kocka vagy egy komplex szörny modellje. A GameObject fényforrás és kamera is lehet, de a szkriptek segítségével bonyolult viselkedést is megadhatunk neki.

A GameObject-ek mappaként is funkcionálnak, további GameObject-eket tartalmazhatnak, így könnyebben rendszerezhetjük őket. A későbbiekben működés közben is láthatjuk majd őket.

scene egy adott szintjét jelenti a játéknak, habár elméletileg az egész játék elhelyezhető egy scene-ben. Minden, a scene-ben aktívan használt GameObject a Hierarchy nézetben jelenik meg:

Hierarchy ablak

Minden új scene egy Main Camera-val és egy Directional Light-tal kezdődik, amelyek ugyancsak GameObject-ek. Ha a Hierarchy-ból törlünk egyet, akkor azt tulajdonképpen a scene-ből töröljük. Ez a nézet az objektumok számának növekedésével egyre hasznosabbá válik majd.

4. Project ablak

A Project ablak tartalmazza a játékunk által használt összes asset-et. Itt kedvünk szerint csoportosíthatjuk őket. A drag and drop módszer a Hierarchy nézethez hasonlóan itt is műdödik, közvetlenül a scene-be is behúzhatunk elemeket. Ha a számítógépről behúzunk valamit a Project ablakba, a Unity automatikusan importálja azokat az asset-eket is. Ez igazán kényelmes tud lenni.

 

Project ablak

A Unity úgyanúgy rendezi el az asset-eket, ahogy azok a fájlrendszerben találhatóak. Az asset-eket soha ne módosítsuk közvetlenül a fájlrendszer szintjén, hiszen úgy a projekt számára is elérhetetlenné válhatnak, ami tönkreteheti a játékot. A Unity tárolja a metaadatokat az asset-ekről, így a könyvtárak közötti mozgatás ezeket az adatokat érvényteleníti. Ha az asset-eket akarjuk rendszerezni, legjobb ezt a Project ablakon belül megtenni.

A folytatásról

A cikksorozat további részeiben a Unity kiemelten fontos nézeteivel és ablakival fogunk foglalkozni. A nézetekről és használatukról egy alapos leírás lesz elérhető, hiszen hatékony kezelésük döntően meggyorsítja a fejlesztést.

Skeldar