Sprievodca vývojom hier v jednote pre najlepších začiatočníkov

Unity je vynikajúci nástroj na vytváranie prototypov všetkého od hier až po interaktívne vizualizácie. V tomto článku prechádzame všetkým, čo potrebujete vedieť, aby ste mohli začať používať Unity.

Najprv trochu o mne: Som amatérsky vývojár Unity, 3d modelár a grafik, ktorý s Unity and Blender spolupracuje viac ako 5 rokov. Teraz som študentkou Financial Maths na University College v Dubline a príležitostne sa venujem grafickému dizajnu na voľnej nohe, prototypov webových stránok a prototypov hier.

Úvod

Tento článok je zameraný na kohokoľvek, kto nikdy predtým nepoužíval Unity, ale má nejaké predchádzajúce skúsenosti s programovaním alebo s webdizajnom / vývojom. Na konci tohto článku by ste mali mať dobrý všeobecný prehľad o engine, ako aj o všetkých potrebných funkciách a kóde, aby ste mohli začať robiť základnú hru.

Prečo jednota?

Ak chcete robiť hry

Existuje naozaj veľmi málo možností, pokiaľ ide o vývoj hry Indie Game. Tri hlavné možnosti, ak chcete stavať hry, sú Unreal, Unity alebo GameMaker.

Unity je z 3 platforiem asi najmenej mienená. Poskytuje veľmi surový produkt po vybalení z krabice, je však vysoko flexibilný, dobre zdokumentovaný a vysoko rozšíriteľný, aby vytvoril takmer akýkoľvek žáner hier, na aký si len spomeniete.

Existuje veľa veľmi úspešných hier, ako napríklad Escape from Tarkov (FPS), Monument Valley (Puzzler) a This War of Mine (Strategy / Survival), všetky postavené v Unity.

V skutočnosti motor, na ktorom postavíte svoju prvú hru, pravdepodobne nie je kritický, takže moja rada je iba vybrať si jednu a ísť s ňou.

Ak chcete vytvoriť prototyp používateľských skúseností

Pretože jednota je iba motor s kopou fyziky, animácií a 3D vykresľovania v reálnom čase, je to tiež skvelý priestor na výrobu plnohodnotných interaktívnych prototypov pre štúdie UX.

Unity má plnú podporu pre VR a AR, a preto by mohla byť skvelým nástrojom na skúmanie architektúry, automatizácií a simulácií s klientmi.

Sekcie k tomuto článku

  • Prečo jednota?
  • Okno editora jednoty
  • Unity herné objekty
  • Integrované komponenty Unity
  • Vytváranie vlastných komponentov
  • Štruktúra mono správania
  • Manipulácia s GameObjects
  • Raycasting
  • Detekcia kolízie
  • Pokročilé vlastnosti
  • Rada pre nováčikov
  • Príjemné zdroje a spoločenstvá
  • Záver

Okno editora jednoty

Okno editora je rozdelené do niekoľkých sekcií. Tomu sa budeme venovať veľmi stručne, pretože sa na to budeme neustále odvolávať v celom článku. Ak sú vám toto už známe, jednoducho preskočte do minulosti!

Zobrazenie scény: Umožňuje umiestnenie a pohyb objektov GameObjects v zobrazení scény scény : Ukáže, ako bude hráč vidieť scénu z kamery. Inšpektor: Poskytuje podrobnosti o vybranom objekte GameObject v scéne. Majetok / projekt: Tu sú uložené všetky montované stavby , textúry, modely, skripty atď. Hierarchia: Umožňuje vnorenie a štruktúrovanie objektov GameObjects na scéne.

Teraz môžeme začať!

Unity herné objekty

Čo sú GameObjects

GameObjects sú základným stavebným prvkom všetkého v hernom engine Unity. Názov ho takmer dáva preč:

Čokoľvek, čo umiestnite na scénu v jednote, musí byť zabalené do „herného objektu“.

Ak máte pozadie webového dizajnu, môžete si myslieť, že GameObjects je veľa ako prvky! Extrémne nudné kontajnery, ale sú veľmi rozšíriteľné na vytvorenie komplexnej funkčnosti alebo vizuálu.

GameObject je doslova všetko od časticových efektov, fotoaparátov, prehrávačov, prvkov používateľského rozhrania ... (zoznam pokračuje).

Vytváranie hierarchie

Rovnako ako pri vývoji webových aplikácií je GameObject tiež kontajnerom. Rovnako ako vnoríte s, aby ste vytvorili rozmanité a žiaduce rozloženia alebo abstrakcie, možno budete chcieť urobiť to isté s hernými objektmi.

Logika vnorenia herných objektov je rovnaká ako pri vývoji webu, uvediem niekoľko príkladov ...

Neporiadok a účinnosť

Webová analógia: Máte veľa podobných prvkov, ktoré sa dajú dynamicky generovať za behu v reakcii na interakciu používateľa a chcete v nich udržiavať poriadok. Preklad Unity: Vaše budovanie klonu Minecraftu a na scéne máte veľa blokov, z výkonnostných dôvodov musíte pridať a odstrániť „kúsky“ blokov zo scény. Preto mať rodičovskú kontrolu nad prázdnym GameObjectom pre každý blok má zmysel, pretože odstránením rodiča bloku sa odstránia všetky podradené bloky.

Polohovanie

Webová analógia: Chcete zachovať pozíciu obsahu obsiahnutého „vo vzťahu“ k kontajneru, a nie k webovej stránke. Preklad Unity: Vytvorili ste si kopu pomocných dronov, ktoré sa vznášajú okolo hráča. Naozaj by ste radšej nepísali kód, ktorý by im povedal, aby prenasledovali hráča, takže ich namiesto toho vytvoríte ako deti objektu hry hráča.

Integrované komponenty Unity

Herecký komponentový model

Samotné GameObjects sú dosť zbytočné - ako sme videli, v podstate ide iba o kontajnery. Aby sme im mohli pridať funkčnosť, musíme pridať komponenty, ktoré sú v podstate skriptmi napísanými buď v C # alebo Javascript.

Jednota funguje na modeli herca ako súčasti, zjednodušene povedané, GameObjects sú herci a komponenty sú vaše skripty.

Ak ste už predtým písali akékoľvek webové aplikácie, budete oboznámení s myšlienkou vytvárať malé opakovane použiteľné komponenty, ako sú tlačidlá, prvky formulárov, flexibilné rozloženia, ktoré majú rôzne direktívy a prispôsobiteľné vlastnosti. Potom tieto malé komponenty zostavíte do väčších webových stránok.

Veľkou výhodou tohto prístupu je úroveň opätovného použitia a jasne definované komunikačné kanály medzi prvkami. Rovnako aj pri vývoji hier chceme minimalizovať riziko nežiaducich vedľajších účinkov. Malé chyby majú tendenciu sa vymykať spod kontroly, ak nie ste opatrní, a je veľmi ťažké ich odladiť. Vytváranie malých, robustných a opakovane použiteľných komponentov je preto kritické.

Kľúčové vstavané komponenty

Myslím si, že je čas na niekoľko príkladov vstavaných komponentov, ktoré poskytuje engine Unity Games.

  • MeshFilter: Umožňuje vám priradiť materiály k 3D sieti k objektu GameObject
  • MeshRender: Umožňuje vám priradiť materiály k 3D sieti
  • [Kolónka | Mesh] Collider: Umožňuje detekciu GameObject počas kolízií
  • Rigidbody: Umožňuje realistickú fyzickú simuláciu pôsobiť na GameObjects s ​​3d sieťami a bude spúšťať udalosti detekcie na kolíkových urýchľovačoch
  • Svetlo: Osvetľuje časti vašej scény
  • Kamera: Definuje výrez hráča, ktorý sa má pripojiť k GameObjectu
  • Rôzne komponenty používateľského rozhrania Canvas na zobrazovanie grafických používateľských rozhraní

Existuje veľa ďalších, ale toto sú hlavné, s ktorými sa musíte oboznámiť. Jedným tipom je, že ku všetkým týmto dokumentom máte prístup prostredníctvom manuálu jednoty a referenčných skriptov offline, nech ste kdekoľvek:

Vytváranie vlastných komponentov

Zabudované komponenty ovládajú predovšetkým fyziku a vizuál, ale aby ste skutočne vytvorili hru, budete musieť akceptovať vstupy používateľov a manipulovať s týmito štandardnými komponentmi, ako aj so samotnými GameObjects.

Ak chcete začať vytvárať komponenty, prejdite do požadovaného GameObject> Pridať komponent> zadajte do vyhľadávacieho panela názov vášho nového komponentu> nový skript (C #).

Ako všeobecné odporúčanie by som neodporúčal používať Javascript v Unity. Nebol aktualizovaný so všetkými skvelými vecami, ktoré boli dodané s ES6, a väčšina pokročilejších vecí sa spolieha na veci C # prenesené na Javascript ... Podľa mojich skúseností sa z toho stane iba jedno obrovské riešenie.

Štruktúra mono správania

Kľúčové funkcie

Všetky komponenty dedia z triedy MonoBehaviour. Zahŕňa niekoľko štandardných metód, čo je najdôležitejšie:

  • void Start (), ktorá sa volá vždy, keď je v scéne inštancovaný objekt obsahujúci skript. To je užitočné kedykoľvek, keď chceme vykonať nejaký inicializačný kód, napr. nastaviť hráčsku výbavu potom, čo sa objaví v zápase.
  • void Update (), ktorá sa nazýva každý rámec. To je miesto, kam sa dostane veľká časť kódu zahŕňajúca vstup používateľa, ktorý aktualizuje rôzne vlastnosti, ako napríklad pohyb hráča v scéne.

Inšpektorové premenné

Často chceme, aby boli komponenty čo najpružnejšie. Napríklad všetky zbrane môžu mať odlišné poškodenie, rýchlosť streľby, has_sight atď. Aj keď sú všetky zbrane v podstate to isté, možno budeme chcieť, aby sme boli schopní rýchlo vytvoriť rôzne variácie prostredníctvom editora jednoty.

Ďalším príkladom, keď to môžeme urobiť, je vytvorenie komponentu používateľského rozhrania, ktoré sleduje pohyby myši používateľa a umiestňuje kurzor do výrezu. Tu by sme možno chceli ovládať citlivosť kurzora na pohyby (ak používateľ používal joystick alebo gamepad proti počítačovej myši). Preto by malo zmysel, aby sa tieto premenné dali ľahko meniť tak v editovacom režime, ako aj experimentovať s nimi počas behu programu.

To môžeme urobiť jednoducho tak, že ich v tele komponentu jednoducho vyhlásime za verejné premenné.

Prijíma sa vstup používateľa

Samozrejme, chceme, aby naša hra reagovala na vstupy používateľov. Najbežnejšie spôsoby, ako to urobiť, sú použitie nasledujúcich metód vo funkcii Update () komponentu (alebo kdekoľvek inde):

  • Input.GetKey (KeyCode.W) Vráti podržanie stlačeného klávesu True W.
  • Input.GetKeyDown (KeyCode.W) Pri prvom stlačení klávesu W vráti hodnotu True
  • Input.GetAxis („Vertikálne“), Input.GetAxis („Horizontálne“) Vráti pohyb medzi -1,1 pohybom myši

Manipulácia s GameObjects

Akonáhle máme vstup od používateľa, chceme, aby GameObjects v rámci našej scény odpovedali. Môžeme zvážiť niekoľko typov odpovedí:

  • Preklad, rotácia, mierka
  • Vytvorte nové GameObjects
  • Posielanie správ existujúcim GameObjects / komponentom

Premeny

GameObjects majú všetky vlastnosti transformácie, ktoré umožňujú vykonávanie rôznych užitočných manipulácií s aktuálnym herným objektom.

Vyššie uvedené metódy sú celkom samozrejmé, stačí si uvedomiť, že na označenie objektu GameObject, ktorý vlastní túto konkrétnu inštanciu súčasti , používame gameObject malými písmenami .

Všeobecne je dobrým zvykom používať skôr lokálnu [pozíciu, rotáciu] ako globálnu polohu / rotáciu objektu. Toto zvyčajne uľahčuje presun objektov, ktoré majú zmysel, pretože os miestneho priestoru bude orientovaná a centrovaná skôr na nadradený objekt ako na svetový pôvod a smery x, y, z.

Ak potrebujete prevádzať medzi miestnym a svetovým priestorom (čo sa často stáva), môžete použiť nasledovné:

Ako si dokážete predstaviť, za týmto znakom je pomerne jednoduchá lineárna algebra, na ktorú naráža 'inverzná' v názve metódy.

Vytváranie nových GameObjects

Pretože GameObjects sú v podstate všetkým na vašej scéne, možno budete chcieť byť schopní ich generovať za behu. Napríklad, ak má váš prehrávač nejaký druh vystreľovača projektilov, možno budete chcieť byť schopní za behu vytvárať projektily, ktoré majú svoju vlastnú zapuzdrenú logiku letu, spôsobovania škôd atď ...

Najskôr je potrebné predstaviť pojem panelová stavba . Môžeme ich vytvoriť jednoduchým presunutím ľubovoľného GameObjectu v hierarchii scén do priečinka assetov.

Toto v podstate uchováva šablónu objektu, ktorý sme práve mali na našej scéne, so všetkými rovnakými konfiguráciami.

Keď už máme tieto montované komponenty, môžeme ich priradiť inšpektorským premenným (ako sme už hovorili skôr) na ľubovoľných komponentoch na scéne, aby sme mohli kedykoľvek vytvárať nové GameObjects podľa špecifikácie montovanej stavby.

Potom môžeme vykonať „inštanciu“ montovanej stavby a manipulovať s ňou na požadovanom mieste v scéne a nadviazať potrebné rodičovské vzťahy.

Prístup k ďalším GameObjects a komponentom

Často musíme komunikovať s ostatnými GameObjects, ako aj s ich pridruženými komponentmi. Ak už máte odkaz na herný objekt, je to celkom jednoduché.

ComponentName comp = some_game_object.GetComponent ();

Potom máte prístup k akejkoľvek verejnej metóde / premenným komponentu, aby ste mohli manipulovať s GameObject. Toto je priamy bit, avšak získanie odkazu na GameObject sa dá v skutočnosti získať niekoľkými spôsobmi ...

Prístup cez inšpekčnú premennú

Toto je najpriamejšie. Jednoducho vytvorte verejnú premennú pre GameObject, ako sme si už predtým ukázali u panelákov, a manuálne ju presuňte na komponent pomocou inšpektora. Potom vstúpte do premennej, ako je uvedené vyššie.

Prístup prostredníctvom označovania

GameObjects alebo montované objekty môžeme označiť prostredníctvom inšpektora a potom pomocou funkcií hľadania herných objektov vyhľadať odkazy na ne.

To sa deje jednoducho tak, ako je uvedené nižšie.

GameObject some_game_object = GameObject.FindGameObjectWithTag („tehla“);

Prístup prostredníctvom transformácie

Ak chceme získať prístup k komponentom v niektorom nadradenom objekte, môžeme to ľahko urobiť pomocou atribútu transformácie.

ComponentName comp = gameObject.transform.parent.GetComponent ();

Prístup cez SendMessage

Alternatívne, ak chceme poslať správu mnohým ďalším komponentom alebo ak chceme poslať správu objektu, ktorý je ďaleko vo vnorenej hierarchii, môžeme použiť funkcie odosielania správ, ktoré akceptujú názov funkcie nasledovaný argumentmi.

gameObject.SendMessage („NázovMetódy“, parametre); // Broadcast messagegameObject.SendMessageUpwards („MethodName“, params); // Iba prijaté komponentmi, ktoré sú vnorené vyššie.

Raycasting

Možno ste už o tom počuli, keď ľudia porovnávali hry FPS založené na fyzike alebo lúčoch. Raycasting je v podstate ako laserové ukazovátko, ktoré pri kontakte s „urýchľovačom“ alebo „pevným telom“ vracia „úder“ a vracia späť podrobnosti o objekte.

Existujú dva scenáre, kedy to príde vhod (je ich pravdepodobne viac):

  1. Ak ste navrhovali zbraňový systém pre hru, mohli by ste na detekciu zásahov použiť raycasting a dokonca si prispôsobiť dĺžku lúča tak, aby predmety nablízko „zasiahli“ iba na krátke vzdialenosti
  2. Vytvorte lúč od ukazovateľa myši po bod v 3D priestore, tj. Ak chcete, aby používateľ mohol v strategickej hre vyberať jednotky pomocou myši.

Ako vidíte, kód pre toto je trochu viac zapojený. Kľúčovou vecou, ​​ktorú treba pochopiť, je, že vrhať lúč na miesto, kam myš smeruje v 3D priestore, si vyžaduje transformáciu ScreenPointToRay. Dôvodom je to, že fotoaparát vykresľuje trojrozmerný priestor ako dvojrozmerný výrez na obrazovke vášho laptopu, takže je samozrejme potrebné premietanie späť do 3d.

Detekcia kolízie

Predtým sme spomenuli komponenty Collider a Rigidbody, ktoré je možné pridať k objektu. Pravidlo pre kolízie je, že jeden objekt pri kolízii musí mať tuhé telo a druhý zrážku (alebo oba musia mať obidve komponenty). Upozorňujeme, že pri použití lúčového lúča budú lúče interagovať iba s objektmi s pripojenými komponentmi urýchľovača.

Po nastavení v rámci ľubovoľnej vlastnej súčasti pripojenej k objektu môžeme na reakcie na kolízie použiť metódy OnCollisionEnter, OnCollisionStay a OnCollisionExit. Keď budeme mať informácie o kolízii, môžeme dostať zodpovednosť za GameObject a použiť to, čo sme sa predtým naučili, aj na interakciu s komponentmi, ktoré sú k nej pripojené.

Je potrebné si uvedomiť, že tuhé telesá poskytujú fyziku ako gravitácia objektov, takže ak chcete túto funkciu vypnúť, musíte skontrolovať funkciu is_kinematic .

Pokročilé vlastnosti

Teraz sa nebudeme venovať ničomu z toho, ale možno budúcemu článku, len aby ste si uvedomili, že existujú.

Vytváranie GUI

Unity má plnohodnotný modul používateľského rozhrania na zostavenie grafického používateľského rozhrania pre vašu hru. Všeobecne tieto komponenty fungujú podobne ako zvyšok motora.

Rozšírenie editora jednoty

Unity vám umožňuje pridať vlastné tlačidlá k vašim inšpektorom, aby ste mohli počas editovacieho režimu ovplyvňovať svet. Napríklad na pomoc pri budovaní sveta môžete vytvoriť vlastné okno s nástrojmi na stavbu modulárnych domov.

Animácia

Unity má grafický animačný systém, ktorý umožňuje kombinovať a ovládať animácie na rôznych objektoch, ako sú napríklad hráči implementujúci kostný animačný systém.

Materiály a PBR

Jednotke beží fyzicky založený vykresľovací modul, ktorý umožňuje osvetlenie v reálnom čase a realistické materiály. Realita je taká, že najskôr sa musíte naučiť 3d modelovanie, alebo použiť modely vyrobené a optimalizované niekým iným, skôr ako sa k tomu dostanete, aby ste vytvorili veci, ktoré skutočne vyzerajú dobre.

Rada pre nováčikov

Ak plánujete písanie svojej prvej hry, nepodceňujte zložitosť a čas potrebný na napísanie aj tej najtriviálnejšej hry. Pamätajte, že väčšina hier, ktoré vyjdú na Steam, má tímy, ktoré na nich pracujú roky na plný úväzok!

Vyberte si jednoduchý koncept a rozdeľte ho na malé dosiahnuteľné míľniky. Dôrazne sa odporúča rozdeliť vašu hru na čo najmenšie nezávislé komponenty, pretože je oveľa menej pravdepodobné, že narazíte na chyby, ak budete komponenty udržiavať jednoduché a nie monolitické bloky kódu.

Predtým, ako napíšete ľubovoľný kód pre ktorúkoľvek časť svojej hry, choďte preskúmať, čo urobil niekto iný predtým, aby vyriešil rovnaký problém - je pravdepodobné, že bude mať oveľa úhľadnejšie riešenie.

Príjemné zdroje a spoločenstvá

Herný dizajn má jednu z najlepších komunít vo svete a v odbore existuje množstvo vysoko kvalifikovaných profesionálov, ktorí dávajú obsah zadarmo alebo takmer nič. Je to oblasť, ktorá vyžaduje 3d modelárov, návrhárov, herných dizajnérov, programátorov a podobne. Nižšie som uviedol niekoľko skvelých všeobecných zdrojov, s ktorými som sa stretol pre každú z týchto oblastí:

Koncepčné umenie

  • Škola dizajnu Feng Zhu (viac ako 90 hodín tutoriálov koncepčného umenia)
  • Tyler Edlin Art (skvelá umelecká komunita BST so spätnou väzbou od profesionálov o mesačných výzvach)
  • Art Cafe (rozhovory a workshopy so známymi konceptuálnymi umelcami)
  • Trent Kaniuga (Illustrator a 2D umelec, ktorý tiež vyrába svoju vlastnú hru)

3D modelovanie

  • CG Cookie (Najlepšie základy modelovania ôk v Blenderi, pre mixér majú veľa iného vynikajúceho obsahu)
  • Tor Frick (Modelári a sochári na tvrdé povrchy v mixéri)
  • Gleb Alexandrov (Krátke výkonné renderingové návody v Blenderi)

Herný dizajn

  • DoubleFine Amnesia Fortnight (GameDevs, ktorí absolvujú dvojtýždňový hackathon a zaznamenajú celý svoj proces návrhu)
  • Sada nástrojov GameMakers (skúma zásady návrhu hry)

Programovanie

  • Handmade Hero (písanie hry a enginu od nuly v C)
  • Jonathan Blow (indický vývojár, ktorý vysiela svoje vývojové hry naživo)
  • Brackeys (Nice Unity Tutorials)

Záver

Dúfam, že sa vám páčil tento návod! Robím trochu práce na grafickom dizajne, rovnako ako prototypy hier a používateľského rozhrania, takže si pozrite moje portfólio ! Som tiež prepojený .

Portfólio| LinkedIn