Unity je izvrstan alat za izradu prototipa svega, od igara, do interaktivnih vizualizacija. U ovom smo članku pregledali sve što trebate znati da biste započeli koristiti Unity.
Prvo, malo o meni: ja sam programer jedinstva hobista, 3d modelar i grafički dizajner koji s Unityjem i Blenderom surađujem više od 5 godina. Sada sam student financijske matematike na Sveučilišnom koledžu u Dublinu i povremeno se bavim slobodnim grafičkim dizajnom, web prototipiranjem i prototipiranjem igara.

Uvod
Ovaj je članak namijenjen svima koji nikada prije nisu koristili Unity, ali imaju neko prethodno iskustvo u programiranju ili u web dizajnu / razvoju. Na kraju ovog članka trebali biste imati dobar opći pregled motora, kao i sve potrebne funkcije i kôd za početak izrade osnovne igre.
Zašto jedinstvo?
Ako želite praviti igre
Stvarno je vrlo malo opcija kada je u pitanju razvoj indie igara. Tri glavna izbora ako želite graditi igre su Unreal, Unity ili GameMaker.
Jedinstvo je vjerojatno najmanje uvjerljivo od tri platforme. Pruža vam vrlo sirov proizvod iz kutije, ali je vrlo fleksibilan, dobro dokumentiran i vrlo proširiv za izgradnju gotovo bilo kojeg žanra igre kojega se možete sjetiti.
Postoji mnoštvo vrlo uspješnih igara poput Escape from Tarkov (FPS), Monument Valley (Puzzler) i This War of Mine (Strategy / Survival) koje su sve ugrađene u Unity.
U stvarnosti motor na kojem gradite svoju prvu igru vjerojatno nije kritičan, pa je moj savjet samo odabrati jednu i nastaviti s njom.
Ako želite prototipirati korisnička iskustva
Budući da je jedinstvo samo motor s hrpom fizike, animacije i 3D prikazivanja u stvarnom vremenu, to je također sjajan prostor za izradu potpuno razvijenih interaktivnih prototipova za UX studije.
Unity ima punu podršku za VR i AR te bi stoga mogao biti izvrstan alat za istraživanje arhitekture, automatizacije i simulacija s klijentima.
Odjeljci ovog članka
- Zašto jedinstvo?
- Prozor uređivača jedinstva
- Objekti igre jedinstva
- Komponente ugrađene u jedinstvo
- Izrada prilagođenih komponenata
- Struktura monoponašanja
- Manipuliranje objektima igre
- Raycasting
- Otkrivanje sudara
- Napredne postavke
- Savjeti za pridošlice
- Lijepi resursi i zajednice
- Zaključak
Prozor uređivača Unity
Prozor uređivača podijeljen je u nekoliko odjeljaka. To ćemo vrlo kratko pokriti jer ćemo se na njega neprestano pozivati kroz članak. Ako vam je ovo već poznato, samo preskočite prošlost!

Sad smo spremni za početak!
Objekti igre jedinstva
Što su GameObjects
GameObjects su temeljni blok svega u Unity engineu za igre. Ime ga gotovo odaje:
Sve što smjestite unutar scene u Unity mora biti zamotano u "objekt igre".Ako imate pozadinu web dizajna, GameObjects možete smatrati sličnim elementima! Izuzetno dosadni spremnici, ali su vrlo proširivi za stvaranje složene funkcionalnosti ili vizuala.

Doslovno sve, od efekata čestica, fotoaparata, playera, UI elemenata ... (popis se nastavlja) je GameObject.
Stvaranje hijerarhije
Kao i u web razvoju, GameObject je također spremnik. Baš kao što se gnijezdiš za stvaranje raznolikih i poželjnih izgleda ili apstrakcija, možda bi to želio učiniti i s objektima igara.
Logika gniježđenja objekata igre gotovo je ista kao i web razvoj, dat ću nekoliko primjera ...Nered i učinkovitost
Web analogija: Imate mnogo sličnih elemenata koji se mogu dinamički generirati u hodu kao odgovor na interakciju korisnika i žele ih održavati urednima. Unity Translation: Ako gradite Minecraft klon i imate puno blokova na sceni, morate dodati i ukloniti 'dijelove' blokova sa scene iz razloga izvedbe. Stoga im je parentiranje praznog GameObject-a za svaki komad logično, jer brisanjem nadređenog dijela uklanjaju se svi dječji blokovi.Pozicioniranje
Web analogija: Želite zadržati položaj sadržanog sadržaja 'relativno' prema spremniku, a ne prema web stranici. Unity Translation: Stvorili ste gomilu pomoćnih dronova koji lebde oko igrača. Zaista ne biste radije napisali kod da biste im rekli da jure za igračem, pa ih umjesto toga instancirate kao djecu objekta igre igrača.Komponente ugrađene u jedinstvo
Model glumačke komponente
GameObjects su sami po sebi prilično beskorisni - kao što smo vidjeli, uglavnom su to samo spremnici. Da bismo im dodali funkcionalnost, moramo dodati komponente, koje su u osnovi skripte napisane na C # ili Javascriptu.
Unity radi na modelu komponente glumca, jednostavno rečeno, GameObjects su glumci, a komponente su vaše skripte.
Ako ste prije napisali bilo koju web-aplikaciju, bit će vam poznata ideja stvaranja malih komponenata za višekratnu upotrebu, poput gumba, elemenata obrasca, fleksibilnih izgleda koji imaju različite smjernice i prilagodljiva svojstva. Zatim sastavljanje ovih malih komponenata u veće web stranice.
Velika prednost ovog pristupa je razina ponovne upotrebljivosti i jasno definirani kanali komunikacije između elemenata. Isto tako u razvoju igara, želimo smanjiti rizik od neželjenih nuspojava. Mali bugovi imaju tendenciju da izmaknu kontroli ako niste oprezni i izuzetno ih je teško ispraviti. Stoga je stvaranje malih, robusnih i višekratnih komponenata presudno.
Ključne ugrađene komponente
Mislim da je vrijeme za nekoliko primjera ugrađenih komponenti koje pruža motor Unity Games.
- MeshFilter: Omogućuje vam dodjeljivanje materijala 3D mreži GameObjectu
- MeshRender: omogućuje vam dodjeljivanje materijala 3D mrežici
- [Kutija | Mesh] Collider: Omogućuje otkrivanje GameObject-a tijekom sudara
- Rigidbody: Omogućava realističnu fizičku simulaciju da djeluje na GameObjects s 3D mrežama i bit će pokretači događaja otkrivanja na sudarnicima
- Svjetlo: osvjetljava dijelove vaše scene
- Kamera: Definira prikaznu ploču playera koja će biti priključena na GameObject
- Razne komponente korisničkog sučelja za prikaz GUI-a
Puno je više stvari, ali ovo su glavne s kojima ćete se trebati upoznati. Jedan savjet je da svim dokumentima za njih možete pristupiti putem priručnika za jedinstvo i reference skriptiranje izvan mreže, ma gdje se nalazili:

Izrada prilagođenih komponenata
Ugrađene komponente prvenstveno kontroliraju fiziku i vizualne elemente, ali da biste zaista napravili igru, morat ćete prihvatiti korisnički unos i manipulirati tim standardnim komponentama, kao i samim GameObjects.
Da biste započeli s izradom komponenata, idite u željeni GameObject> Dodaj komponentu> upišite ime svoje nove komponente u traku za pretraživanje> nova skripta (c #).Kao opću preporuku, savjetovao bih da ne upotrebljavate Javascript u jedinstvu. Nije se ažurirao sa svim sjajnim stvarima koje smo dobili s ES6-om, a većina naprednijih stvari oslanja se na C # stvari prenesene na Javascript ... Po mom iskustvu to jednostavno postaje jedno ogromno rješenje.
Struktura monoponašanja
Ključne funkcije
Sve se komponente nasljeđuju iz klase MonoBehaviour. Sadrži nekoliko standardnih metoda, što je najvažnije:
- void Start () koji se poziva kad god se objekt koji sadrži skriptu instancira u sceni. To je korisno kad god želimo izvršiti neki inicijalizacijski kod, npr. postaviti igračevu opremu nakon što se pojave u meču.
- void Update () koji se naziva svaki kadar. Tu će ići glavnina koda koji uključuje unos korisnika, ažurirajući različita svojstva, poput kretanja playera u sceni.
Inspektorske varijable
Često želimo komponente učiniti što fleksibilnijima. Na primjer, sva oružja mogu imati različitu štetu, brzinu pucanja, has_sight itd. Iako je sve oružje u osnovi ista stvar, možda bismo željeli moći brzo stvoriti različite varijacije kroz editor jedinstva.
Sljedeći primjer kada bismo to možda željeli učiniti je kada stvaramo komponentu korisničkog sučelja koja prati kretanje korisnikovog miša i postavlja kursor u okvir za prikaz. Ovdje bismo mogli željeti kontrolirati osjetljivost kursora na pokrete (ako je korisnik koristio navigacijsku tipku ili gamepad u odnosu na računalni miš). Stoga bi imalo smisla ove varijable lako mijenjati u načinu uređivanja, a također eksperimentirati s njima tijekom izvođenja.

To možemo učiniti jednostavnim deklariranjem kao javne varijable u tijelu komponente.

Prihvaćanje korisničkog unosa
Naravno, želimo da naša igra reagira na unos korisnika. Najčešći načini za to su sljedeći načini u funkciji Update () komponente (ili bilo gdje drugo):
- Input.GetKey (KeyCode.W) Vraća tipku True W zadržana je pritisnuta
- Input.GetKeyDown (KeyCode.W) Vraća True kad prvi put pritisnete tipku W
- Input.GetAxis ("Vertikalno"), Input.GetAxis ("Horizontalno") Vraća između -1,1 unosa miša
Manipuliranje objektima igre
Nakon što unesemo korisničke podatke, želimo da GameObjects unutar naše scene reagiraju. Postoji nekoliko vrsta odgovora koje bismo mogli uzeti u obzir:
- Prijevod, rotacija, skala
- Stvorite nove GameObjects
- Slanje poruka postojećim GameObjects / komponentama
Transformacije
Svi GameObjects imaju svojstvo transformiranja koje omogućavaju izvođenje raznih korisnih manipulacija na trenutnom objektu igre.

Gore navedene metode prilično su objašnjene, samo imajte na umu da koristimo mala GameObject za pozivanje na GameObject koji posjeduje ovaj specifični primjerak komponente.
Općenito je dobra praksa koristiti lokalnu [Position, Rotation], a ne globalnu poziciju / rotaciju objekta. To obično olakšava premještanje objekata na način koji ima smisla, jer će os lokalnog prostora biti orijentirana i centrirana na nadređeni objekt, a ne na svjetsko podrijetlo i x, y, z upute.

Ako trebate pretvoriti između lokalnog i svjetskog prostora (što je često slučaj), možete koristiti sljedeće:

Kao što možete zamisliti, iza toga postoji prilično jednostavna linearna algebra na koju naslućuje 'Inverzno' u nazivu metode.
Stvaranje novih GameObjects
Budući da su GameObjects u osnovi sve na vašoj sceni, možda biste ih željeli generirati u hodu. Na primjer, ako vaš igrač ima neku vrstu pokretača projektila, možda biste željeli biti u mogućnosti stvoriti projektile u letu koji imaju vlastitu inkapsuliranu logiku leta, nanošenja štete itd ...
Prvo moramo predstaviti pojam montažne ploče . Možemo ih stvoriti jednostavnim povlačenjem bilo kojeg GameObject-a u hijerarhiji scene u mapu sredstava.

Ovo u osnovi pohranjuje predložak predmeta koji smo upravo imali na sceni sa istim konfiguracijama.

Jednom kad imamo ove prefab komponente, možemo ih dodijeliti inspektorima varijablama (kao što smo ranije govorili) na bilo kojoj komponenti u sceni, tako da u bilo kojem trenutku možemo stvoriti nove GameObjects kako ih navodi prefab.
Tada možemo izvršiti 'instanciranje' prefaba i manipulirati njime do željenog mjesta u sceni i uspostaviti potrebne roditeljske odnose.

Pristup ostalim GameObjektima i komponentama
Često moramo komunicirati s drugim GameObjects-ima, kao i s njima povezanim komponentama. Jednom kad se uputite na objekt igre, ovo je prilično jednostavno.
ComponentName comp = some_game_object.GetComponent ();Nakon toga možete pristupiti bilo kojoj od javnih metoda / varijabli komponente kako biste manipulirali GameObjectom. To je jednostavan bit, međutim zapravo dobivanje reference na GameObject može se izvršiti na nekoliko načina ...
Pristup putem varijable inspektora
Ovo je najjednostavnije. Jednostavno stvorite javnu varijablu za GameObject, kao što smo već pokazali s prefabima, i ručno je povucite i ispustite na komponentu putem inspektora. Zatim pristupite varijabli kao gore.
Pristup putem označavanja
Putem inspektora možemo označiti GameObjects ili prefabs, a zatim pomoću funkcija pronađi objekt igre pronaći lokacije na njih.

To se jednostavno radi kao u nastavku.
GameObject some_game_object = GameObject.FindGameObjectWithTag (“Cigla”);Pristup putem pretvorbe
Ako želimo pristupiti komponentama u nekom nadređenom objektu, to možemo lako učiniti putem atributa transform.
ComponentName comp = gameObject.transform.parent.GetComponent ();Pristup putem SendMessagea
Ako želimo poslati poruku mnogim drugim komponentama ili želimo poslati objekt koji je daleko prema ugniježđenoj hijerarhiji, možemo koristiti funkcije slanja poruka koje prihvaćaju ime funkcije praćene argumentima.
gameObject.SendMessage (“MethodName”, parametri); // Emitiranje messagegameObject.SendMessageUpwards (“MethodName”, params); // Primaju samo komponente koje su gore ugniježđene.Raycasting
Možda ste već čuli za to kad ljudi uspoređuju FPS igre koje se temelje na "fizici" ili "na zraci". Raycasting je u osnovi poput posjedovanja laserskog pokazivača koji, kada dođe u kontakt s "sudaračem" ili "krutim tijelom", vrati "pogodak" i proslijedi detalje predmeta.
Postoje dva scenarija u kojima ovo dobro dođe (vjerojatno ih ima još):
- Ako ste dizajnirali sustav oružja za igru, mogli biste koristiti raycasting za otkrivanje pogodaka, pa čak i prilagoditi duljinu zrake tako da predmeti iz blizine 'udaraju' samo na kratkim dometima
- Stvorite zraku od pokazivača miša do točke u 3d prostoru, tj. Ako želite da korisnik može odabrati jedinice pomoću miša u strateškoj igri.

Kao što vidite, kod za ovo je malo više uključen. Ključna stvar koju treba razumjeti je da za bacanje zrake tamo gdje miš pokazuje u 3D prostoru potrebna je transformacija ScreenPointToRay. Razlog tome je što kamera prikazuje 3D prostor kao 2d prikaz na zaslonu vašeg prijenosnog računala, tako da naravno postoji i projekcija za povratak u 3d.
Otkrivanje sudara
Ranije smo spomenuli Collider i Rigidbody komponente koje se mogu dodati objektu. Pravilo sudara je da jedan objekt u sudaru mora imati kruto tijelo, a drugi sudarač (ili oba imaju obje komponente). Imajte na umu da će zrake zračenjem komunicirati samo s objektima s pričvršćenim komponentama sudarača.
Jednom kada postavimo bilo koju prilagođenu komponentu koja je priključena na objekt, možemo koristiti metode OnCollisionEnter, OnCollisionStay i OnCollisionExit da odgovorimo na sudare. Jednom kada dobijemo informacije o sudaru, GameObject možemo smatrati odgovornim i iskoristiti ono što smo ranije naučili za interakciju s komponentama povezanim s njim.

Jedna stvar koju treba napomenuti je da kruta tijela pružaju fiziku poput gravitacije za objekte, pa ako želite da se ovo isključi, morat ćete provjeriti je li is_kinematic uključen.

Napredne postavke
Nećemo ulaziti u ništa od ovoga sada, ali možda u budući članak - samo da bismo vas upoznali s tim da postoje.
Izrada GUI-ja
Unity ima potpuno razvijeni UI engine za postavljanje GUI-a za vašu igru. Općenito ove komponente rade prilično slično kao i ostatak motora.
Proširivanje Unity Editora
Unity omogućuje dodavanje prilagođenih gumba inspektorima kako biste mogli utjecati na svijet tijekom načina uređivanja. Na primjer, za pomoć u izgradnji svijeta možete razviti prilagođeni prozor alata za izgradnju modularnih kuća.
Animacija
Unity ima animacijski sustav zasnovan na grafikonu koji vam omogućuje kombiniranje i kontrolu animacija na različitim objektima, poput igrača koji implementiraju sustav animacije temeljenog na kostima.
Materijali i PBR
Unity pokreće fizički zasnovan mehanizam za prikazivanje koji omogućuje osvjetljenje u realnom vremenu i realne materijale. Stvarnost je da ćete ili morati prvo naučiti 3d modeliranje ili koristiti modele koje je netko drugi napravio i optimizirao prije nego što dođete do ovoga, kako biste napravili stvari koje zapravo izgledaju dobro.
Savjeti za pridošlice
Ako planirate napisati svoju prvu igru, ne podcjenjujte složenost i vrijeme potrebno za pisanje čak i naj trivijalnijih igara. Sjetite se da većina igara koje izlaze na Steamu imaju timove koji rade na njima godinama puno radno vrijeme!
Odaberite jednostavan koncept i podijelite ga na male dostižne prekretnice. Preporučuje se da svoju igru odvojite na što manje neovisne komponente, jer je mnogo manja vjerojatnost da ćete naići na programske pogreške ako komponente držite jednostavnim, a ne monolitnim blokovima koda.
Prije nego što krenete i napišete bilo koji kôd za bilo koji dio svoje igre, idite i istražite što je netko drugi prije učinio da biste riješili isti problem - šanse su da će imati mnogo klizavije rješenje.
Lijepi resursi i zajednice
Dizajn igara ima jednu od najboljih zajednica u svijetu, a u industriji postoji mnoštvo visoko kvalificiranih profesionalaca koji sadržaje stavljaju besplatno ili u bescjenje. To je područje koje zahtijeva 3d modelere, koncept umjetnike, dizajnere igara, programera i tako dalje. U nastavku sam povezao neke sjajne općenite resurse na koje sam naišao za svako od ovih polja:
Concept Art
- Škola dizajna Feng Zhu (više od 90 sati udžbenika koncepta)
- Tyler Edlin Art (sjajna BST umjetnička zajednica s povratnim informacijama profesionalaca o mjesečnim izazovima)
- Art Cafe (intervjui i radionice s poznatim konceptualnim umjetnicima)
- Trent Kaniuga (ilustrator i 2D umjetnik koji također izrađuje vlastitu igru)
3D modeliranje
- CG kolačić (Najbolje osnove mrežnog modeliranja u Blenderu ikad, imaju gomilu drugog izvrsnog sadržaja za blender)
- Tor Frick (Modelatori tvrde površine i kipari u Blenderu)
- Gleb Alexandrov (kratki moćni vodiči za prikazivanje u Blenderu)
Dizajn igara
- DoubleFine Amnesia Fortnight (GameDevs koji naprave dvotjedni hackathon i snime cijeli svoj postupak dizajniranja)
- GameMakers Toolkit (ispituje principe dizajna igara)
Programiranje
- Ručno izrađeni heroj (pisanje igre i motora od nule u C)
- Jonathan Blow (Indie razvijač koji uživo prenosi njegov razvoj igara)
- Brackeys (Tutoriali za lijepo jedinstvo)
Zaključak
Nadam se da vam se svidio ovaj vodič! Bavim se grafičkim dizajnom, kao i prototipovima igara i korisničkog sučelja, pa pogledajte moj portfelj ! Također sam na povezanom .
Portfelj| LinkedIn
