A kezdőknek szóló útmutató a játék fejlesztéséhez az egységben

Az Unity nagyszerű eszköz a prototípusok készítéséhez a játéktól kezdve az interaktív vizualizációkig. Ebben a cikkben áttekintjük mindazt, amit tudnia kell a Unity használatának megkezdéséhez.

Először is, egy kicsit rólam: hobbista egységfejlesztő, 3D-s modellező és grafikus vagyok, aki több mint 5 éve dolgozik az Unity és a Blender mellett. Pénzügyi matematika hallgató vagyok a dublini egyetemen, és alkalmanként szabadúszó grafikai tervezéssel, webes és játék prototípus készítéssel foglalkozom.

Bevezetés

Ez a cikk mindenkinek szól, aki még soha nem használta a Unity-t, de rendelkezik valamilyen korábbi tapasztalattal a programozással vagy a webdesign / fejlesztés terén. A cikk végére rendelkeznie kell egy jó általános áttekintéssel a motorról, valamint az összes szükséges funkcióról és kódról az alapjáték elkészítéséhez.

Miért éppen az Egység?

Ha játékokat akarsz készíteni

Valóban nagyon kevés lehetőség van az Indie Game fejlesztésére. A játékok felépítésének három fő választása az Unreal, a Unity vagy a GameMaker.

Az Unity a legkevésbé vélekedik a 3 platform közül. Nagyon nyers terméket ad ki a dobozból, de nagyon rugalmas, jól dokumentált és rendkívül bővíthető, hogy nagyjából bármilyen játékműfajt felépítsen, amelyre csak gondolhat.

Rengeteg nagy sikerű játék található, mint például az Escape from Tarkov (FPS), a Monument Valley (Puzzler) és a This War of Mine (Stratégia / Túlélés).

A valóságban az a motor, amelyre az első játékot építi, valószínűleg nem kritikus, ezért azt tanácsolom, hogy válasszon egyet, és menjen vele.

Ha prototípusba akarja helyezni a felhasználói élményeket

Mivel az egység csak egy motor, rengeteg fizikával, animációval és valós idejű 3d-leképezéssel, nagyszerű lehetőség teljes körű interaktív prototípusok készítésére az UX-vizsgálatokhoz.

A Unity teljes mértékben támogatja a VR-t és az AR-t, és így kiváló eszköz lehet az architektúra, az automatizálás és az ügyfelekkel végzett szimulációk feltárására.

A cikk szakaszai

  • Miért éppen az Egység?
  • Unity Editor ablak
  • Unity Game Objects
  • Unity Builtin Components
  • Egyedi alkatrészek létrehozása
  • A mono-viselkedés szerkezete
  • A GameObjects manipulálása
  • Sugárzás
  • Ütközésészlelés
  • Speciális funkciók
  • Tanácsok újonnan érkezőknek
  • Szép források és közösségek
  • Következtetés

Unity editor ablak

A szerkesztőablak pár szakaszra oszlik. Nagyon röviden kitérünk erre, mivel a cikkben folyamatosan hivatkozunk rá. Ha már ismeri ezt, csak ugorjon át!

Jelenet-nézet: Lehetővé teszi a GameObjects elhelyezését és mozgatását a Jelenet- játék nézetben: Megtekintheti, hogy a játékos hogyan fogja látni a jelenetet a kamerafelügyelőtől : Adja meg a jelenet kiválasztott GameObject-jének részleteit. Eszközök / Project: Minden prefabs, textúrák, modellek, scriptek, stb itt tárolja hierarchiája: Lehetővé teszi a fészkelő és szerkezetének GameObjects belül a helyszínre

Most már jók vagyunk a kezdéshez!

Unity Game Objects

Mik azok a GameObjects

A GameObjects az Unity játékmotor minden elemének alapvető építőköve. A név szinte adja:

Bármit, amit a Unity egy jelenetén belül elhelyez, „játékobjektumba” kell csomagolni.

Ha rendelkezik webdesign háttérrel, úgy gondolhatja, hogy a GameObjects nagyon hasonlít az elemekre! Rendkívül unalmas konténerek, de rendkívül kibonthatóak komplex funkcionalitás vagy látvány létrehozása érdekében.

Szó szerint minden, a részecske effektusoktól, kameráktól, lejátszóktól, felhasználói felület elemektől… (a lista folytatódik) egy GameObject.

A hierarchia megteremtése

A webfejlesztéshez hasonlóan a GameObject is tároló. Ahogyan fészkel, változatos és kívánatos elrendezéseket vagy absztrakciókat hozhat létre, ugyanezt megteheti a játékobjektumokkal is.

A fészkelő játékobjektumok logikája nagyjából megegyezik a webfejlesztéssel, hozok néhány példát ...

Rendetlenség és hatékonyság

Web analógia: Számos hasonló elem van, amelyeket dinamikusan generálhat menet közben a felhasználói interakcióra reagálva, és rendben akarja tartani őket. Unity Translation: Ha elkészít egy Minecraft klónt, és rengeteg blokk van a jelenetben, akkor teljesítmény okokból hozzá kell adnia és el kell távolítania a blokkok darabjait a helyszínről. Így van értelme, ha minden egyes darabnál üres GameObject-et szülővé tesznek, mivel a darab szülő törlésével az összes gyermekblokk eltávolításra kerül.

Helymeghatározás

Web-analógia: A tartalom helyzetét a tárolóhoz, és nem a weboldalhoz viszonyítva szeretné „megtartani”. Unity Translation: Ön létrehozott egy csomó segítő drónt, amelyek a lejátszó körül lebegnek. Valójában nem szívesebben írna kódot, hogy megmondja nekik, hogy üldözzék a játékost, ezért inkább a játékos játék objektumaként példázza őket.

Unity Builtin Components

A színész komponens modellje

A GameObjects önmagában elég haszontalan - mint láttuk, nagyjából csak konténerek. A funkcionalitás hozzáadásához összetevőket kell hozzáadnunk, amelyek lényegében C # vagy Javascript formátumú szkriptek.

Az Unity egy Actor Component modellen dolgozik, egyszerűen fogalmazva: a GameObjects a színész, az Components pedig a szkripted.

Ha bármilyen webalkalmazást írt, mielőtt ismeri a kis újrafelhasználható összetevők, például gombok, űrlap elemek, rugalmas elrendezések létrehozásának ötletét, amelyek különféle irányelvekkel és testreszabható tulajdonságokkal rendelkeznek. Ezután ezeket a kis alkatrészeket állítsa össze nagyobb weboldalakra.

A megközelítés nagy előnye az újrafelhasználhatóság szintje és az elemek közötti világosan meghatározott kommunikációs csatornák. Hasonlóképpen a játékfejlesztés terén is, szeretnénk minimalizálni a nem kívánt mellékhatások kockázatát. A kisméretű hibák hajlamosak kikerülni az ellenőrzés alól, ha nem vagy óvatos, és rendkívül nehéz hibakeresni. Ezért kritikus fontosságú a kicsi, robusztus és újrafelhasználható alkatrészek létrehozása.

Kulcs beépített alkatrészek

Azt hiszem, itt az ideje néhány példának a Unity Games motor által biztosított beépített alkatrészekre.

  • MeshFilter: Lehetővé teszi anyagok hozzárendelését egy 3D hálóhoz egy GameObject-hez
  • MeshRender: Lehetővé teszi anyagok hozzáadását egy 3D hálóhoz
  • [Box | Mesh] Collider: Lehetségesvé teszi a GameObject észlelését ütközések során
  • Rigidbody: Lehetővé teszi a reális fizikai szimuláció működését a GameObjects-en 3D hálós hálózattal, és észlelési eseményeket vált ki a box collidereken
  • Fény: Megvilágítja a jelenet egyes részeit
  • Kamera: Meghatározza a GameObjecthez csatolandó lejátszó nézetablakot
  • Különböző felhasználói felület vászon komponensek a GUI-k megjelenítésére

Rengeteg több van, de ezek a legfontosabbak, amelyekkel meg kell ismerkednie. Az egyik tipp az, hogy ezekhez az összes dokumentumhoz hozzáférhet az unity kézikönyvben és a szkriptek referenciáján kívül, bárhol is tartózkodhat:

Egyedi alkatrészek létrehozása

A beépített komponensek elsősorban a fizikát és a látványt vezérlik, de ahhoz, hogy valóban játékot készítsen, el kell fogadnia a felhasználói bevitelt, és manipulálnia kell ezeket a szabványos összetevőket, valamint magukat a GameObjects-eket is.

Az alkotóelemek létrehozásának megkezdéséhez lépjen a kívánt GameObject> Összetevő hozzáadása elemre> írja be az új összetevő nevét a keresősávba> új szkript (c #).

Általános ajánlásként azt tanácsolom, hogy ne használja a Javascript-et az Unity-ben. Nem frissítették az ES6-hoz tartozó összes remek dologgal, és a legfejlettebb dolgok többsége a Javascriptre áthelyezett C # anyagokra támaszkodik ... Tapasztalatom szerint ez csak egy óriási megoldás.

A mono-viselkedés szerkezete

Főbb funkciók

Minden komponens a MonoBehaviour osztályból származik. Számos standard módszert tartalmaz, a legfontosabb:

  • void Start (), amelyet akkor hívnak meg, amikor a szkriptet tartalmazó objektum példányos lesz a jelenetben. Ez bármikor hasznos, ha valamilyen inicializáló kódot végre akarunk hajtani, pl. állítsa be a játékos felszerelését, miután ívtak egy meccsbe.
  • void Update (), amelyet minden képkockának hívnak. Ide kerül a felhasználó által bevitt kód nagy része, frissítve a különféle tulajdonságokat, például a lejátszó mozgását a jelenetben.

Ellenőr változók

Gyakran a lehető legrugalmasabbá akarjuk tenni az alkatrészeket. Például minden fegyvernek eltérő lehet a sérülése, a tűzsebessége, a látása stb. Bár az összes fegyver lényegében ugyanaz, szeretnénk, ha gyorsan tudnánk különböző variációkat létrehozni az unity szerkesztő segítségével.

Egy másik példa, ahol érdemes ezt megtenni, amikor olyan felhasználói felületet hozunk létre, amely nyomon követi a felhasználói egér mozgását és kurzort helyez a nézetablakba. Itt érdemes szabályoznunk a kurzor mozgásérzékenységét (ha a felhasználó joystickot vagy játékvezérlőt vagy számítógépes egeret használt). Ezért lenne értelme, ha ezeket a változókat szerkesztési módban könnyen megváltoztatnánk, és a futás közben is kísérleteznénk velük.

Ezt egyszerűen megtehetjük, ha egyszerűen nyilvános változóként deklaráljuk őket az összetevő testében.

Felhasználói bevitel elfogadása

Természetesen azt akarjuk, hogy a játékunk reagáljon a felhasználói adatokra. Ennek legáltalánosabb módja a következő módszerek használata az összetevők Update () függvényében (vagy bárhol máshol):

  • Input.GetKey (KeyCode.W) Visszaadja a True W billentyűt
  • Az Input.GetKeyDown (KeyCode.W) True értéket ad vissza, amikor a W gombot először megnyomja
  • Input.GetAxis („Függőleges”), Input.GetAxis („Vízszintes”) -1,1 egér beviteli mozgása között tér vissza.

A GameObjects manipulálása

Miután megvan a felhasználói bevitel, szeretnénk, ha a jelenetünkben lévő GameObjects válaszolna. Többféle választ is figyelembe vehetünk:

  • Fordítás, forgatás, skála
  • Új GameObjects létrehozása
  • Üzenetek küldése meglévő GameObjects / komponensekhez

Átalakulások

A GameObjects mindegyik rendelkezik egy transzformációs tulajdonsággal, amely lehetővé teszi az aktuális játékobjektum különféle hasznos manipulációinak végrehajtását.

A fenti módszerek meglehetősen magától értetődőek, csak vegye figyelembe, hogy a kisbetűs gameObject- et használjuk arra a GameObject- re való hivatkozásra, amely a komponens ezen speciális példányának tulajdonosa.

Általában jó gyakorlat a helyi [Helyzet, Forgatás] használata, nem pedig az objektum globális helyzete / forgatása. Ez általában megkönnyíti az objektumok értelmes módon történő mozgatását, mivel a helyi tér tengelye a szülőobjektumra lesz orientálva és középpontban, nem pedig a világ eredete és az x, y, z irányok között.

Ha konvertálnia kell a helyi és a világtér között (ami gyakran előfordul), akkor a következőket használhatja:

Ahogy el tudod képzelni, van egy meglehetősen egyszerű lineáris algebra mögött, amelyet a metódus nevében az „inverz” sejtet.

Új GameObjects létrehozása

Mivel a GameObjects alapvetően minden az Ön jelenetében, érdemes lehet őket menet közben is előállítani. Például, ha a játékosának van valamilyen lövedék-indítója, akkor érdemes lehet menet közben olyan lövedékeket létrehozni, amelyeknek saját kapszulájú logikájuk van a repüléshez, a károk kezeléséhez stb.

Először be kell vezetnünk a Prefab fogalmát . Ezeket egyszerűen létrehozhatjuk úgy, hogy a jelenet-hierarchiában lévő GameObject-t áthúzzuk az eszközök mappájába.

Ez lényegében az objektum sablonját tárolja, amely éppen a jelenetünkben volt, ugyanazokkal a konfigurációkkal.

Miután megvan ezek az előregyártott alkatrészek, hozzárendelhetjük őket a jelenet bármelyik komponenséhez az ellenőrző változókhoz (amiről korábban beszéltünk), így bármikor létrehozhatunk új GameObjektumokat az előregyártó által meghatározottak szerint.

Ezután elvégezhetjük az előregyártás „példányosítását”, manipulálhatjuk a kívánt helyszínre a jelenetben, és létrehozhatjuk a szükséges szülői kapcsolatokat.

Hozzáférés a többi játékobjektumhoz és alkatrészhez

Gyakran kommunikálnunk kell más GameObjects-kel, valamint a hozzájuk tartozó összetevőkkel. Ha van utalás egy játékobjektumra, ez nagyon egyszerű.

ComponentName comp = some_game_object.GetComponent ();

Ezt követően elérheti az összetevő bármelyik nyilvános módszerét / változóját a GameObject manipulálása érdekében. Ez az egyenes bit, de valójában a GameObject hivatkozás megszerzése többféle módon történhet…

Hozzáférés az ellenőr változón keresztül

Ez a legegyszerűbb. Egyszerűen hozzon létre egy nyilvános változót a GameObject számára, amint azt az előregyártókkal korábban bemutattuk, és manuálisan húzza az elemre az ellenőrzőn keresztül. Ezután érje el a változót a fentiek szerint.

Hozzáférés címkézéssel

Az ellenőr segítségével felcímkézhetjük a GameObjekteket vagy az előregyártott elemeket, majd a játékobjektum keresés funkcióval megkereshetjük a hivatkozásokat.

Ez egyszerűen az alábbiak szerint történik.

GameObject some_game_object = GameObject.FindGameObjectWithTag („Tégla”);

Hozzáférés transzformációval

Ha valamilyen szülőobjektumhoz hozzá akarunk férni, akkor ezt könnyen megtehetjük a transform attribútumon keresztül.

KomponensNév comp = gameObject.transform.parent.GetComponent ();

Hozzáférés SendMessage-en keresztül

Alternatív megoldásként, ha üzenetet akarunk küldeni sok más összetevőnek, vagy olyan objektumot szeretnénk üzenetet küldeni, amely messze be van ágyazva a hierarchiában, akkor használhatjuk az üzenetküldés funkciókat, amelyek elfogadják a függvény nevét, amelyet az argumentumok követnek.

gameObject.SendMessage („MethodName”, paraméterek); // Broadcast messagegameObject.SendMessageUpwards („MethodName”, paraméterek); // Csak a fent beágyazott alkatrészek fogadják.

Sugárzás

Lehet, hogy már hallott erről, amikor az emberek összehasonlítják a „fizika alapú” vagy „sugár alapú” FPS játékokat. A sugárzási sugárzás lényegében olyan, mint egy lézermutató, amely „ütközővel” vagy „merev testtel” érintkezve „találatot” ad vissza, és visszaadja az objektum részleteit.

Két forgatókönyv van, ahol ez jól jön (Valószínűleg még több van):

  1. Ha fegyverrendszert terveztek egy játékhoz, akkor sugárzást használhat a találatok észleléséhez, és akár a sugár hosszát is úgy szabhatja meg, hogy a közelharci tárgyak csak rövid távolságokon "találjanak el".
  2. Hozzon létre egy sugarat az egérmutatótól a 3d tér egy pontjáig, azaz ha azt szeretné, hogy a felhasználó stratégiai játékban képes legyen egérrel egységeket kiválasztani.

Amint láthatja, ennek kódja egy kicsit jobban érintett. A legfontosabb dolog, amit meg kell érteni, hogy egy sugár leadásához oda, ahol az egér a 3D térben mutat, a ScreenPointToRay transzformációra van szükség. Ennek az az oka, hogy a kamera egy 3D-s helyet jelenít meg 2d-s nézetablakként a laptop képernyőjén, így természetesen van egy vetület, amely visszavezethető a 3D-re.

Ütközésészlelés

Korábban említettük a Collider és a Rigidbody komponenseket, amelyek hozzáadhatók egy objektumhoz. Az ütközésekre az a szabály, hogy az ütközés során az egyik tárgynak merev testnek, a másiknak ütközőnek (vagy mindkettőnek tartalmaznia kell mindkét alkatrészt). Ne feledje, hogy sugárzás használatakor a sugarak csak olyan objektumokkal lépnek kölcsönhatásba, amelyekhez ütközőkomponensek vannak csatlakoztatva.

Miután beállítottuk az objektumhoz csatolt bármely egyedi komponenst, használhatjuk az OnCollisionEnter, OnCollisionStay és OnCollisionExit módszereket az ütközésekre való reagálásra. Miután megvan az ütközési információ, felelőssé tehetjük a GameObject-et, és a korábban tanultakat felhasználhatjuk a hozzá kapcsolódó alkatrészekkel való interakcióra is.

Egy dolgot meg kell jegyezni, hogy a merev testek olyan fizikai fizikát nyújtanak, mint a gravitáció az objektumok számára, így ha azt ki akarja kapcsolni, be kell kapcsolnia az is_kinematic funkciót .

Speciális funkciók

Ebből most nem foglalkozunk, de talán egy későbbi cikkben - csak azért, hogy tudatosítsuk bennük, hogy léteznek.

GUI készítése

A Unity rendelkezik egy teljes értékű felhasználói felület motorral a játék GUI-jának elkészítéséhez. Ezek az alkatrészek általában hasonlóan működnek, mint a motor többi része.

Az Unity Editor bővítése

A Unity lehetővé teszi, hogy egyedi gombokat adjon az ellenőrökhöz, hogy a szerkesztési módban befolyásolhassa a világot. Például a világépítés segítése érdekében kidolgozhat egy egyedi eszközablakot moduláris házak építéséhez.

Élénkség

A Unity rendelkezik grafikon alapú animációs rendszerrel, amely lehetővé teszi az animációk keverését és vezérlését különböző objektumokon, például egy csont alapú animációs rendszert megvalósító játékosokon.

Anyagok és PBR

Az Unity lefuttat egy fizikai alapú renderelő motort, amely valós idejű világítást és valósághű anyagokat tesz lehetővé. A valóság az, hogy vagy először meg kell tanulnia a 3D-s modellezést, vagy pedig valaki más által készített és optimalizált modelleket kell használnia, mielőtt rátérne erre, annak érdekében, hogy valóban jól néz ki.

Tanácsok újonnan érkezőknek

Ha első játékának megírását tervezi, ne becsülje alá a bonyolultságot és a legtriviálisabb játékok megírásához szükséges időt. Ne feledje, hogy a Steam-en megjelenő játékok többségén csapatok dolgoznak évekig, teljes munkaidőben!

Válasszon egy egyszerű koncepciót, és bontsa szét kis elérhető mérföldkövekre. Erősen ajánlott a játékot minél kisebb független összetevőkre szétválasztani, mivel sokkal kevésbé valószínű, hogy hibákat fut be, ha az összetevőket egyszerűnek tartja, nem pedig monolit kódblokkoknak.

Mielőtt elmész és bármilyen kódot írsz a játék bármely részéhez, keresd meg, mit tett valaki korábban ugyanazon probléma megoldása érdekében - valószínű, hogy sokkal lassabb megoldást fognak találni.

Szép források és közösségek

A játéktervezés az egyik legjobb közösséggel rendelkezik, és rengeteg magasan képzett profi van az iparban, akik ingyen vagy semmiért teszik fel a tartalmat. Ez egy olyan terület, amelyhez 3D modellezők, konceptuális művészek, játéktervezők, programozók és így tovább szükségesek. Összevontam néhány remek általános forrást, amelyekkel találkoztam az alábbi mezők mindegyikében:

Concept Art

  • Feng Zhu Design School (Több mint 90 órás konceptuális oktatóanyagok)
  • Tyler Edlin Art (Nagyszerű BST művészeti közösség a profik visszajelzéseivel a havi kihívásokról)
  • Art Cafe (interjúk és workshopok híres konceptuális művészekkel)
  • Trent Kaniuga (illusztrátor és 2D művész, aki szintén saját játékot készít)

3D modellezés

  • CG Cookie (A legjobb hálós modellezés alapjai a turmixgépben, rengeteg más kiváló tartalommal rendelkeznek a turmixgéphez)
  • Tor Frick (kemény felületű modellezők és szobrászok turmixgépben)
  • Gleb Alexandrov (Rövid, hatékony renderelési oktatóanyagok a Blenderben)

Játéktervezés

  • DoubleFine Amnesia Fortnight (GameDevs, akik 2 hetes hackatont végeznek és rögzítik a teljes tervezési folyamatot)
  • GameMakers eszközkészlet (megvizsgálja a játéktervezés alapelveit)

Programozás

  • Kézzel készített hős (játék és motor írása a semmiből C-ben)
  • Jonathan Blow (Indie dev, aki élőben közvetíti játékfejlesztését)
  • Brackeys (Nice Unity oktatóanyagok)

Következtetés

Remélem, tetszettek nektek ez a bemutató! Csinálok egy kis grafikai munkát, valamint játék- és felhasználói felület prototípusokat, ezért nézze meg portfólióm ! Én is linkelt vagyok .

Portfólió| LinkedIn