Pet savjeta za korištenje Unity game enginea

Unity je prava digitalna tvornica videoigara. Svakom novom verzijom postaje moćniji i dostupniji početnicima.

Bez obzira krećeš li tek s upoznavanjem alata ili već posjeduješ vještinu upravljanja njegovih mogućnosti, sigurno ćeš cijeniti korisne savjete.

Već smo nešto općenito pričali o Unity 3D game engineu, a ovoga puta donosimo pet ideja kako poboljšati svoj rad u tom softveru.

Uči na greškama

Nitko ne voli na ekranu dobiti obavijest o greški u programu, ali i to je dio u procesu učenja. Unity ima vrlo razvijenu dokumentaciju. U prijevodu to znači da je svaku grešku lako prepoznati, saznati njezinu prirodu te najvažnije – pronaći način kako je otkloniti.

Sve što trebaš napraviti jest u Google upisati “site:unity3d.com” i u nastavku dodati ispisanu poruku o grešci (Error Message). Tražilica će te vrlo brzo dovesti do svih potrebnih informacija.

Usput možeš proučiti tutorijale i API dokumentaciju koja će ti dodatno razjasniti kako poboljšati projekt i zaobići probleme u budućnosti.

Vodi računa o GC-u

Usporavanje i padanje frame ratea česta je poteškoća u razvoju videoigara, posebno kad se rade za mobilno tržište.

Najčešći je krivac za ovu pojavu u Unityju sustav skupljanja otpada (Garbage Collection, tj. GC). Njegova je zadaća oslobađanje memorije pod stresom nepotrebnih objekata, što nerijetko predstavlja izazov tijekom rada na igri.

Postoji nekoliko načina kako se ovaj sustav može dovesti u red. Primjerice, često stvaranje i uništavanje objekata u igri može opteretiti GC. Umjesto toga pametnije je stvoriti kolekciju objekata na njezinom samom početku i tijekom igre im naređivati da se samo pale i gase.

U slučaju stringova pripazi da ne stvaraš nove objekte ovog tipa za svaku sličicu u igri. Isto tako, valja voditi računa o objektima koje skupljaš kroz GetComponents naredbu. Ako njezini parametri nisu dobro definirani, moguće je da će često raditi probleme Garbage Collectionu.

Razmisli i o pisanju nove arhitekture koja možda neće ovisiti u tolikoj mjeri o GetComponentsu.

Koristi Profiler

Svaka verzija Unityja dolazi s odličnim digitalnim alatom zvanim Profiler. Riječ je o sustavu koji detektira probleme poput memory leakova i garbage collectiona čak prije nego počnu remetiti igračevo iskustvo.

Da stvar bude bolja, Profiler možeš aktivirati mimo svog kompjutera putem Androida ili iOS-a. Sustav će bez poteškoća analizirati izvedbu igre na stroju s kojeg je pozvan dajući najbolje moguće analitičke rezultate.

Profiler je moguće namjestiti da prati izvedbu određenog dijela skripte što se doslovno može nazvati dubinskim provjerama projekta.

Verzija ovog sustava u pro verziji Unityja nešto je nadmoćnija od standardnog paketa, no i potonju možemo opisati kao jako korisnu.

Jednostavnost je ključ

Kako ćeš usvajati znanja o Unityju i principima dizajna u njemu, shvatit ćeš jednostavnu istinu. Što je više neka skripta generična, to se može češće ponovo koristiti.

Ovo u konačnici znači manje duplog koda, što će naravno utjecati na brzinu izrade igre. Ako si usput pomažeš radom u samom C#, moći ćeš doći do još generičnih rješenja.

Zamisli situaciju u kojoj imaš objekte igrača i njegovog neprijatelja na ekranu. Svaki od njih ima svoju skriptu koja rukovodi različitim mogućnostima. U slučaju umiranja, moguće je da će doći do duplanja koda pa ćeš vrlo vjerojatno posegnuti za izmjenama i pisanju novih dijelova skripte.

To će svakako biti korak u pravom smjeru, no tada ćeš imati problem međusobne ovisnosti skripti. Umjesto toga moguće je napraviti interface IKillable ili IDeath, koji će preuzeti odgovornost za provedbu umiranja objekata. Kad to proradi, može se implementirati smrt igrača ili njegovog neprijatelja u igri.

Izrada igre ovim putem je brza, no ne bi se smjelo previše oslanjati na korištenje interfacea. Ako se budu primjenjivali na svaku klasu, može doći do novih poteškoća u provedbi igre.

Izrada igre kroz testove

Osmišljen da ubrza projektiranje i približi datum izlaska tvoje igre, Unityjev TDD sustav može biti težak izazov za početnike. Timovi koji su ga uklopili u svoj način rada na kraju su uvelike profitirali.

Skraćenica zapravo znači Test-Driven-Development, što bi se doslovno prevelo kao “razvoj temeljen na testiranju”. O čemu se zapravo radi?

Sve počinje testom koji definira očekivano ponašanje ili značajku projekta. Primjerice, želiš da se igračev lik pojavi na određenom mjestu nakon što ga nešto u igri uništi (spawna se na određenoj poziciji). U tu svrhu napisat ćeš test koji igračev lik pozove u igru, uništi ga i pretpostavi da je pozicija na kojoj je uništen blizu pozicije na kojoj je pozvan.

Važno je shvatiti da kod koji određuje prolazak testa ne postoji kad napišeš sami test. U njemu se nalaze tek osnove konačnog izgleda, dovoljne tek za kompajliranje (primjerice, nastanak prazne klase za “spawn” i funkcije).

Takav će test naravno propasti jer nema “implementacije spawnanja”. Unatoč tome dovodi te u položaj iz kojeg lako možeš postepeno nadograditi elemente te u konačnici doći do zadovoljavajućih rezultata.

Zamisli da imaš desetine ovakvih testova u svojem projektu i svi se izvrše bez ijedne greške. Tada možeš bez ikakve sumnje zaključiti da su sve značajke u praksi izvršene na najbolji mogući način.

Ako si upoznat sa stalnom integracijom (“continuous integration”), igru možeš proslijediti izvornoj kontroli (“source control”) te tako gotovo automatski graditi njezine nove elemente. Dapače, tvoj tim može primati emailove u slučaju neprolaska nekog testa te brzo detektirati probleme.

Vježbom do znanja

Ne brini ako ti neki gornji pojmovi možda nisu jasni. Uz marljivu vježbu i učenje Unity game enginea brzo ćeš usvojiti sva potrebna znanja za primjenu ovih savjeta i djelotvoran rad u ovom alatu.

Najbolji početak za tvoju game dev karijeru može biti i tečaj Unityja u Machini. Za sva dodatna pitanja možeš nam se javiti na email machina@machina.hr.