Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Željezo
  • Unreal vs Unity: što je bolje za razvoj mobilnih igara? Rezultati usporedbe. okvirna stopa

Unreal vs Unity: što je bolje za razvoj mobilnih igara? Rezultati usporedbe. okvirna stopa

U prethodnim lekcijama modelirali smo i teksturirali krajolik, zgrade i vanjske predmete. Kako sada spojiti sve ove objekte u jednu scenu i postaviti ih na prava mjesta? Gdje pronaći nestale predmete - automobile, drveće, grmlje, cvijeće? O tome ćemo naučiti u ovoj lekciji.

U ovom vodiču umetnut ćemo objekte u scenu pomoću naredbe Sjediniti(Kombinirajte) i rasporedite ove objekte kao kontrolere Popis pozicija(kontrolor položaja popisa), Ograničenje puta(Ograničenje na putu), alat snimak(vrsta objekta), dodatak Višestruko raspršivanje i njegov modul MultiPainter, kao i naučiti kako prevesti objekte u Proxy objekti.

1. Umetanje objekata iz drugih datoteka.

1. Otvorite pejzažnu datoteku. U ovu datoteku ćemo umetnuti sve ostale objekte i postaviti ih na nacrtani krajolik.

2. Umetnite zgrade. Da biste to učinili, idite na izbornik datoteka(Datoteka) > kliknite na strelicu pored gumba Uvoz(Uvoz) > Sjediniti(Kombiniraj) (slika 1).

Riža. 1. Korištenje naredbe Merge

3. U prozoru koji se otvori odaberite potrebnu datoteku i kliknite otvorena(Otvoreno) (slika 2).


Riža. 2. Odabir željene datoteke

4. Pojavio se prozor Sjediniti(Merge), koji navodi nazive svih objekata iz priložene datoteke. Trebaju nam samo zgrade. Da bismo odabrali samo objekte koji su nam potrebni, kliknite na njih dok držite pritisnutu tipku ctrl. Klik u redu(slika 3).


Riža. 3. Odabir potrebnih objekata

Odabrani objekti su umetnuti u pejzažnu scenu (slika 4).


Riža. 4. Umetanje objekata

Vježba 1

Sami umetnite sve vanjske predmete u istu datoteku (slika 5).


Riža. 5. Umetanje vanjskih predmeta

Bilješka: ako ste postavili sve objekte na svoje slojeve, onda kada zalijepite te objekte u drugu datoteku, slojevi će također biti kopirani. Stoga, ako ste savjesno stvarali slojeve kako je opisano u lekcijama, sada imate Upravljanje slojevima(Layer Manager) slojevi trebaju biti prisutni kao na sl. 6.


Riža. 6. Prikaz upravitelja slojeva

2. Umetanje objekata iz knjižnica gotovih modela

U prethodnim lekcijama naučili smo kako modelirati mnoge objekte koji su nam potrebni. Ali postoje takvi objekti čije će modeliranje trajati jako dugo, ili je za njihovo stvaranje potrebno vrlo duboko poznavanje programa ili jednostavno nema smisla modelirati ih, jer već postoje i mogu se jednostavno preuzeti. Takvi objekti uključuju automobile, drveće, grmlje, cvijeće itd.

Postoje mnoge stranice na kojima možete preuzeti slične modele, na primjer:

  • http://www.3dklad.com/ itd.

Također, neki gotovi modeli mogu se preuzeti iz odjeljka "Knjižnica" ove stranice.

Takve biblioteke gotovih modela mame renderere početnike da brzo i jednostavno sastave scenu ubacujući u nju sve manje-više prikladne modele iz kolekcije. Ali budite vrlo oprezni, jer može postojati problem nedostatka hardverskih resursa u završnoj fazi rada. To je zbog činjenice da preuzeti modeli mogu imati ogroman broj poligona.

    Prvo, kada tražite modele, provjerite odgovaraju li materijali modela rendereru u kojem radite (VRay).

    Drugo, nakon preuzimanja nemojte odmah umetati model u svoju scenu, već ga otvorite u zasebnoj sceni i riješite model svega suvišnog što se neće jasno vidjeti. Neke elemente općenito ima smisla ukloniti ili ponovno modelirati, jer modelari rijetko brinu o minimiziranju svog proizvoda.

Tek nakon toga možete sigurno umetnuti model u svoju scenu bez straha da ćete ga preopteretiti.

Zadatak 2

Preuzmite, provjerite i zalijepite ( uvoz > spajanje) na našu scenu maketa drveća, grmlja, cvijeća, kamenja, auta i dalje prema vlastitom nahođenju (sl. 7).


Riža. 7. Umetanje gotovih modela

Svakako napravite slojeve za te objekte i postavite ih svaki na svoj sloj (slika 8).


Riža. 8. Prikaz upravitelja slojeva

3. "Ručno" postavljanje objekata

Za preciznije i fino podešavanje scene, vrlo je prikladno koristiti ručnu metodu raspoređivanja objekata. Stoga ćemo zgrade, klupe, urne, putokaze, cvijeće i kamenje za gredice, automobile urediti na najobičniji način - "ručno", jednostavnim povlačenjem mišem pomoću alata Odaberite i premjestite(Odaberite i pomaknite). Objekti koji nedostaju dobit će se kopiranjem s pritisnutom tipkom Shift. Odaberite vrstu kopije Primjer(Uzorak) (slika 9).


Riža. 9. Kopiranje objekata koji nedostaju

Kao rezultat, trebali bismo dobiti scenu kao na sl. 10, sl. jedanaest.


Riža. 10. Pogled na scenu nakon "ručnog" postavljanja predmeta


Riža. 11. Aranžirani objekti

4. "Automatsko" postavljanje objekata pomoću kontrolera, prijenos na Proxy i alat Snapshot

Postoje predmeti koje je potrebno složiti s određenom pravilnošću, na primjer, lampioni, rešetke, grmlje u lijepo "izrezanim" uzorcima. Stoga ćemo razmotriti metodu koja vam omogućuje automatizaciju procesa postavljanja objekata.

1. Odaberite objekt, na primjer, fenjer.

2. Prevedimo fenjer u Proxy objekt. Proxy objekt postaje, takoreći, referenca na objekt koji se i sam nalazi negdje drugdje. To će pomoći u smanjenju velikog opterećenja programa i video kartice te smanjiti zahtjev za dodjelom RAM-a. To će omogućiti korištenje milijuna, pa čak i milijardi poligona u sceni na običnim računalima, što je najprikladnije za rješavanje našeg zadatka stvaranja grada.

Formulirajmo potrebne uvjete za prijenos objekta na Proxy objekt.

    Ako se objekt sastoji od nekoliko komponenti, tada se moraju kombinirati pomoću naredbe Pričvrstite u jedan objekt.

    Sve teksture bi već trebale biti primijenjene na objekt.

Tek nakon što su ovi uvjeti ispunjeni, objekt se može prenijeti na proxy. Da biste to učinili, desnom tipkom miša kliknite objekt i odaberite naredbu iz kontekstnog izbornika koji se otvori. Izvoz V-Ray mreže(Izvoz na V-Ray površinu) (slika 12).


Riža. 12. Prijenos objekta na Proxy

U prozoru koji se otvori, u polju Mapa(Mapa) Navedite put za spremanje Proxy objekta (preporučljivo je stvoriti mapu za Proxy objekte u mapi projekta kako se Proxy objekti ne bi izgubili kada radite na vašem projektu na drugom računalu). U polju datoteka(Datoteka) Odredite naziv za proxy objekt ili ostavite zadani. Obavezno označite okvir Automatski kreirajte proxyje(Automatski stvori proxy) i kliknite u redu(slika 13).


Riža. 13. Parametri za prijenos objekta na proxy

Objekt će promijeniti svoj izgled. Ovo je još jedna značajka proxy objekata za olakšavanje opterećenja. Objekt može izgledati kao okvir, kao nejasna mreža, ili čak kao točka, itd. - ovisno o odabranim opcijama gledanja u parametrima Proxy objekta - ali nakon renderiranja poprimit će svoj pravi oblik (Sl. 14).


Riža. 14. Pojednostavljeni prikaz objekta i njegova vizualizacija

3. Provjerite imate li točka stožera(Točka sidrišta, točka zaokreta i mjerilo objekta) na podnožju objekta. Sada, prema zadanim postavkama, točka je u sredini lampiona. Mora se premjestiti na svoju bazu. Da biste to učinili, idite na karticu Hijerarhija(Hijerarhija) i odaberite Utječe samo na Pivot(Utjecaj na referentnu točku). Sada uz pomoć Odaberite i premjestite(Odaberi i premjesti) i Snaps 3 možemo pomaknuti sidrišnu točku (slika 15). Nakon toga ne zaboravite izaći iz načina uređivanja.


Riža. 15. Pomaknite zakretnu točku

4. Napravimo unaprijed stazu, duž koje će svjetla biti ravnomjerno postavljena. U našem slučaju jednostavno stvaramo Krug oko parka, kao na sl. 16.


Riža. 16. Kreiranje staze

5. Dodijelite lampion kontrolori. Ovaj koncept se odnosi na animaciju u 3Ds Maxu. Uz pomoć kontrolera, programer 3D grafike može fleksibilno kontrolirati promjenu animiranih parametara objekata. Kontroleri animacije su stubovi ovisnosti prema kojima se parametri mogu mijenjati. U ovom vodiču koristit ćemo kontrolere ne za animaciju, već za postavljanje objekata.

Odaberite svjetiljku i idite na karticu Pokret(Pokret). Otvorimo svitak Dodijelite kontrolora(Dodijelite kontroler), označite po retku Položaj: PoložajXYZ(Položaj: pozicija XYZ) i kliknite na gumb dodijeli kontroler. S popisa koji se otvori odaberite Popis pozicija(Popis kontrolera položaja). Ovaj kontroler vam omogućuje da kombinirate nekoliko neovisnih kontrolera odjednom kako biste stvorili zajedničku animaciju, što će nam biti korisno u budućnosti.


Riža. 17. Svrha Kontrolora popisa pozicija

Nakon primjene ovog kontrolera u popisima Položaj: Popis pozicija > Položaj XYZ: Položaj XYZ pojavit će se linija Dostupno(Dostupno) koji vam omogućuje dodavanje novih kontrolera na popis. Odaberite ovaj redak i ponovno kliknite gumb. Dodijelite kontrolora. U dijaloškom okviru koji se otvori, ovaj put odaberite Ograničenje puta(Ograničenje na putu). Ovaj kontroler ograničava kretanje objekta duž putanje, što je navedeni spline. Ovaj se kontroler koristi za animiranje objekata duž složenih putanja (na primjer, kretanje automobila duž ceste). Pritisnimo u redu(slika 18).


Riža. 18. Dodjela kontrolera ograničenja puta

Sada niže, u svitku Popis pozicija izdvojiti Ograničenje puta i pritisnite tipku Postavite aktivno(Učiniti aktivnim). U svitku Parametri puta(Parametri puta) kliknite na gumb Dodaj put(Dodijeli put) i odaberite unaprijed kreiranu stazu. Obavezno označite okvir pored slijediti(Slijedite), odaberite željenu os, ako je potrebno, odrazite s Okrenite(Odraziti). Lanterna će se pomaknuti na početak staze (slika 19).


Riža. 19. Svrha staze

6. Ako sada pokrenete animaciju, lampion će se kretati točno duž putanje. Ali sve te radnje s dodjelom kontrolora sada nisu bile radi animacije, već kako bi objekt jasno slijedio put koji nam je potreban. Sada ćete shvatiti zašto nam je to bilo potrebno.

Iz glavnog izbornika Alati(Alati) odaberite alat snimak(Vrsta objekta) (Sl. 20). Dizajniran je za stvaranje niza objekata duž putanje animacije izvornog objekta (u našem slučaju, animacije lampiona duž putanje).


Riža. 20. Položaj alata za snimku

U prozoru koji se otvori potvrdite okvir pored Domet(Na putu), ostavite vrijednosti iz 0 do 100 primjeraka(Broj primjeraka) postavite prema vlastitom nahođenju. Odaberite način kopiranja Primjer(Uzorak) i pritisnite u redu. Odmah ćemo vidjeti kako se svjetla automatski postavljaju duž putanje koju smo nacrtali (slika 21).


Riža. 21. Korištenje Snapshot Tool

Ostala je jedna važna točka. Morate ukloniti originalni lanter s animacijom, inače će se kretati u krug na našem prezentacijskom videu. To je vrlo jednostavno učiniti: sada je odabrano, pa bez uklanjanja odabira pritisnite gumb Izbrisati na tipkovnici.

Ako je lampa na krivom mjestu, uvijek je možete premjestiti "ručno". Kao rezultat, dobit ćemo prizor sličan Sl. 22.


Riža. 22. Završni pogled nakon postavljanja svjetala

7. Rasporedite lampione po ostatku grada. Gdje nije baš zgodno koristiti "automatsko" postavljanje svjetala - učinite to ručno (slika 23).


Riža. 23. Aranžirani lampioni

Zadatak 3

Na potpuno isti način sami rasporedite male rešetke oko parka (Sl.).

1. Odaberite malu mrežu i prevedite je u Proxy objekt.

2. Pomaknite se točka stožera u podnožju objekta (slika 24).


Riža. 24. Pivot Točka u podnožju objekta

3. Nacrtajte putanju za postavljanje rešetke - Krug malo više nego prije.

4. Uzastopno dodijelite kontrolere Popis pozicija I Ograničenje puta. Uključite regulator Ograničenje puta klikom na gumb Postavite aktivno. Dodijelite unaprijed kreiranu stazu klikom na gumb Dodaj put. Mreža se pomaknula na početak staze i stajala okomito na nju (slika 25).


Riža. 25. Rešetka koja se nalazi okomito na stazu

To bi trebalo ispraviti tako da potvrdite okvir pored slijediti(Slijediti). Možete odabrati željenu os, ako trebate reflektirati pomoću Okrenite(Flip) (slika 26).


Riža. 26. Rešetka smještena uz stazu

5. Iz glavnog izbornika Alati odabrati alat snimak. U prozoru koji se otvori potvrdite okvir pored Domet(Na putu), ostavite vrijednosti 0 do 100 primjeraka(Broj primjeraka) postavlja se prema našem nahođenju, glavna stvar je da se rešetke savršeno uklapaju jedna s drugom. Odaberite način kopiranja Primjer, pritisnite u redu(slika 27). Rešetke se automatski postavljaju duž putanje koju smo nacrtali.


Riža. 27. Korištenje Snapshot Tool

Izbrišite izvornu animiranu mrežu pritiskom na tipku Izbrisati na tipkovnici.

Ako je neka mreža na krivom mjestu, na primjer, točno na stazi, uvijek je možete premjestiti "ručno" ili je potpuno ukloniti. Kao rezultat, dobit ćemo prizor sličan Sl. 28.


Riža. 28. Završni pogled nakon postavljanja malih rešetki

Zadatak 4

Postavite sami velike barove oko kuća i škola. Negdje ćete ih morati organizirati ručno (na primjer, gdje su vrata), negdje se ovaj proces može automatizirati. Krajnji rezultat trebao bi biti nešto poput sl. 29, sl. trideset.


Riža. 29. Završni pogled nakon postavljanja velikih rešetki


Riža. 30. Završni pogled nakon postavljanja velikih rešetki

Zadatak 5

Postavite grmlje automatski duž nacrtanih staza (Sl. 31, Sl. 32).


Riža. 31. Uređeno grmlje


Riža. 32. Uređeno grmlje

5. "Automatski" raspored objekata pomoću dodatka MultiScatter - MultiPainter

Već smo razmotrili nekoliko načina raspoređivanja objekata u sceni: "ručno" i "automatski" duž putanje. Ali što ako trebamo složiti doslovno milijune kopija nekog objekta, poput trave ili šume? Ovdje nam već poznate metode neće pomoći.

Vjerojatno ste već čuli za Višestruko raspršivanje. Ovo je dodatak za 3Ds max s kojim možete jednostavno i jednostavno kreirati scene s milijunima objekata. Nova verzija MultiScattera uključuje novi i vrlo koristan modul MultiPainter. Omogućuje vam "slikanje" objekata na površini pomoću virtualnog kista. Crtanje se može pojaviti i na jednoj površini, i na nekoliko odjednom. Možete crtati s nekoliko različitih objekata odjednom. Stoga je MultiPainter idealan za naše zadatke.

1. Preuzmite i instalirajte dodatak Višestruko raspršivanje.2. Odaberite pramenove trave i prevedite ih Proxy objekti (desni klik > izvoz VRay mreže). U dijaloškom okviru koji se otvori navedite naziv i mapu, potvrdite okvir Automatski kreirajte proxyje. Klik u redu.

3. Provjerite to točka stožera nalazio se u podnožju čuperaka trave.

4. Sada možemo rasporediti ove objekte pomoću MultiScatter - MultiPainter. Da biste to učinili, na kartici Stvoriti birati geometrija i odaberite s padajućeg popisa Višestruko raspršivanje, pritisni gumb MultiPainter.

Nakon toga, svakako stavite njegovu oznaku izravno u scenu - da biste to učinili, držite pritisnutu lijevu tipku miša i povucite pokazivač u bilo kojem smjeru (slika 33).


Riža. 33. MultiPainter oznaka

5. Nakon toga idite na karticu Izmijeniti. Ovdje vidimo parametre novoinstaliranog MultiPainter.

U svitku Slikajte objekte(Objekti crtanja) u odjeljku Raspršite objekte(Objekti za postavljanje) morate navesti objekte s kojima ćemo crtati. Pritisnemo gumb +čajnik i odaberite naše objekte u sceni. Dugme +popis omogućuje odabir objekata s popisa, a ne sa scene. Birajte predmete na način koji vam najviše odgovara. Dugme -čajnik odgovoran je za uklanjanje objekata za crtanje.

Nakon što odredite objekte za crtanje, dvije opcije će postati dostupne - Vjerojatnost(vjerojatnost, gustoća) i Stopa sudara(Vrijednost sudara). To su oni koje treba postaviti. Za sada, postavimo vrijednost za zelenu zraku Vjerojatnost 200, stopa sudara 5, a za požutjelu gredu Vjerojatnost 10, stopa sudara 5.

U odjeljku Opcije četkice(Postavke četke) se mogu podesiti Radius(Radius), mekoća(Mekoća ruba) i Intenzitet(Intenzitet, sila pritiska) četke. Stavimo Radijus 100, mekoća 1, Intenzitet 80. Ovdje su najvažniji gumbi Boja(izvlačenje) i Izbriši(Izbriši).

U svitku Površine(Površine) potrebno je navesti površinu(e) na kojoj će se crtanje izvoditi. Gumbi su vam već poznati, njihovo djelovanje je slično prethodnim. Ovdje označavamo površinu našeg travnjaka.

U svitku Rotirati(Rotacija) Možete odrediti za koliko stupnjeva se objekti mogu rotirati kada se nacrtaju. Stavite na os Z vrijednost rotacije 360 stupnjeva kako bi čuperci trave izgledali drugačije i da se ne ponavljaju.

U svitku Mjerilo(Skaliranje) možete odrediti koliko će se objekti međusobno razlikovati u mjerilu. Postavimo vrijednost Iz(Iz) 90 , Do(Prije) 100 .

U svitku pregled(Pregled) možete odabrati način prikaza objekata u okviru za prikaz. Kutija - svaki objekt će biti u obliku okvira, Križ - u obliku križa, Points, Count - u obliku skupa točaka, Ništa - neće se ni na koji način prikazati u okviru za prikaz, što može biti od velike pomoći u teškoj sceni.

Sve potrebne postavke prikazane su na sl. 34.


Riža. 34. MultiPainter postavke

6. Dakle, instalirali smo sve potrebne parametre i postavke. Sada odaberite obje grede u odjeljku Raspršite objekte i pritisnite tipku Boja(Crtati). Bojimo četkom izravno na našem travnjaku (slika 35).


Riža. 35. Slikanje kistom

Koliko su postavljeni parametri uspješni za scenu može se vidjeti tek nakon preliminarnog renderiranja. Pogledajmo rezultat renderiranjem slike (slika 36). Ako je potrebno, promijenite potrebne parametre.


Riža. 36. Grozdovi trave raspoređeni u sceni

Zadatak 6

Rasporedite čuperke trave po gradu, na isti način uredite stabla u gradu (Sl. 37) i šire (Sl. 38).


Riža. 37. Smješten u gradskoj travi i drveću


Riža. 38. Smješten izvan grada trava i drveće

Bilješka: da biste uštedjeli računalne resurse, možete postaviti objekte samo tamo gdje će kamera letjeti.

Ovo je zanimljivo!

A ne tako davno naišli smo na zanimljiv članak o razvoju mobilnih igara pomoću Unityja (od 12. kolovoza 2015.); međutim, ključna prednost članka je u tome što ovaj alat uspoređuje sa svojim glavnim konkurentom: Unreal Engineom.

Upravo s ovom prekrasnom studijom pozivamo vas da se upoznate u petak navečer. U komentarima će nam biti drago vidjeti preporuke za objavljivanje knjiga o NG-u, a nadamo se i plodonosnoj raspravi.

Članak preveden s manjim skraćenicama

Mi (OnlineFussballManager GmbH) trenutno počinjemo razvijati novi projekt za mobilne uređaje. Stvorit ćemo uzbudljivu i jedinstvenu kombinaciju potezne strategije i nogometne menadžerske igre.

Igrači će moći planirati i kreirati vlastite klupske prostore i sportske objekte, trenirati momčad i raditi na njezinoj taktici. Timski igrači neće biti samo jedinice u majicama s brojevima, već realne osobnosti s vlastitim crtama, pa čak i izrazima lica. Sve će se odvijati u izometrijskom pogledu na različite prostorije i prostore kluba, gdje će animirane zgrade biti smještene u posebno definiranoj mreži.

Dakle, došao je trenutak istine kada smo krenuli s razvojem vizualnog prikaza.
S obzirom na postavljene zahtjeve i činjenicu da ovu igru ​​moramo razviti i za iOS i za Android - kako tehnički implementirati ovaj projekt?

Jedno od prvih pitanja koje je trebalo odlučiti bilo je hoćemo li izraditi vlastiti motor ili koristiti postojeći. Naravno, prva opcija je optimalna ako želite imati potpunu kontrolu nad svime što se događa u vašem izvornom kodu, toolchainu, a također u potpunosti razumjeti koliki će biti vaš prihod od ove igre. Nedostatak ovog pristupa je što će takav razvoj zahtijevati znatan trud - zbog čega će se rokovi cijelog projekta povećati, a on će značajno poskupjeti. Brzo smo odustali od ove ideje, jer smo željeli zadržati troškove i vrijeme projekta u razumnim granicama.

Naravno, možete dati puno argumenata o tome koji je motor bolji i za koje svrhe. Koliko ljudi - toliko mišljenja. Moramo priznati da smo u nekom trenutku i mi osjetili takav subjektivizam. Tim je aktivno podržavao Unreal Engine. No, koliko god gledali na UE, nitko je nije mogao objektivno okarakterizirati, a da se ne poziva na osobno mišljenje.

Stoga smo odlučili ne ometati se od činjenica i počeli smo istraživati ​​druge, poznatije alate.
GameMaker je ubrzo napušten jer je bio više usmjeren na početnike koji su tek počeli u razvoju igara. Dakle, prilično je lako naučiti, ali mogućnosti GameMakera očito su bile ispod onoga što smo željeli učiniti.

Na red je došao Cocos2D, koji se na prvi pogled činio obećavajućim. Kao što ime govori, Cocos2D je optimiziran za razvoj 2D igara. Dakle, pitanje je bilo želimo li stvoriti našu izometrijsku mrežu zgrada u pravom 2D ili u stvarnom 3D s fiksnom točkom gledišta. Nakon dodatnog istraživanja odlučili smo se za 3D implementaciju. U ovom slučaju nam Cocos2D očito nije odgovarao.

Okrenuli smo se marmeladi. Uostalom, uz pomoć Marmelade, poznate igre kao što su "Plants vs. Zombiji i »Bog«. No, iako smo u ovom motoru našli puno prednosti, bilo je problema koji su nas natjerali da se okrenemo drugim opcijama. Jedan od najvećih nedostataka bio je taj što je zajednica Marmelade prilično mala.

Dakle, od glavnih alternativa, ostali su samo Unreal i Unity. No, čak ni do sada, nismo mogli sa sigurnošću izabrati jedno od njih bez pomoći.

Srećom, približavala se GDC igra konferencija u San Franciscu pa smo iskoristili priliku da doletimo tamo i posavjetujemo se s kolegama.

Tamo smo se susreli s dečkima iz Epica, pobliže upoznali Unreal Engine, isprobali Paper 2D, njihov alat za pregled pregleda mobilnih aplikacija i pitali što bismo trebali koristiti: njihov engine ili Unity?

Dečki su nas razveselili govoreći otprilike ovako: “Unreal je cool, ali ni Unity nije loš. Pokušajte oboje."

Zatim smo otišli do Unity developera i pogledali Unity 5 – kako poboljšava performanse u iOS-u. Na kraju su im postavili isto pitanje i dobili sličan odgovor.

U ovoj fazi odlučili smo se za temeljitu tehničku studiju. Dizajnirali smo prototip koji je vrlo sličan našem projektu za testiranje na različitim mobilnim uređajima kako će teći proces izrade i kakve će biti performanse. Istodobno, željeli smo saznati i kakve bi nas zamke i problemi mogli čekati pri razvoju prvog i drugog motora.

Budući da su svi naši programeri bili zauzeti tekućim projektima, posao na prototipu povjerili smo stručnjacima iz Bit Barona.

Istraživanje motora Bit Baron

»Online Fußball Manager« (OFM) planirao je izraditi mobilnu igru. Zamoljeni smo za pomoć kako bismo sigurnije odlučili koji je motor najbolji za njihov projekt. Do tada smo isključivo razvijali igre preglednika, ali smo odlučili da se možemo nositi s tim zadatkom. Predloženo je usporediti dvije opcije: Unity i Unreal. Trenutno su to dvije "lokomotive" u svijetu programiranja igara. Postoji dosta izvješća koja detaljno ilustriraju sitne razlike između njih. No, posebnost našeg rada bila je da smo za usporedbu napisali dvije gotovo identične testne aplikacije i okarakterizirali njihovu izvedbu u skladu sa sustavom kontrolnih točaka (benchmarking).

Pišući dvije slične aplikacije, uspjeli smo testirati obje na ravnopravnom terenu, reći OFM-u koja verzija ima bolju izvedbu i istaknuti dodatne probleme.

testni slučaj

Željeli smo stvoriti mjerilo koje bi OFM-u pružilo informacije izravno povezane s vrstom igre koju stvaraju. Kupci su naveli da bi prototip trebao imati nekoliko animiranih zgrada i stabala. Stoga smo kreirali 3D scenu gdje je korisnik zamoljen da te objekte postavi na kartu samostalno. Mreža je bila veličine 11x16 i sadržavala je do 176 zgrada. Svaki mrežni kvadrat podržavao je do 6 stabala, tako da bi na sceni moglo biti preko 1000 stabala. Dodali smo jednostavno korisničko sučelje gdje možete dodati određeni broj stabala i zgrada na scenu. Dodali smo i funkciju dodavanja zgrada na određenim mjestima - za to ste morali kliknuti na kartu na željenoj točki. Što se organizacije programa tiče, izgradili smo rešetku na ravnini, a scenu smo promatrali kroz kameru koja se nalazi "iznad glave korisnika". Dodali smo i namjensku funkciju kamere kako bismo omogućili korisniku zumiranje i pomicanje scene. Budući da je ovaj prototip napravljen kako bismo se odlučili za razvojni motor, dali smo sve od sebe da scena izgleda gotovo isto u obje verzije. Inače bi bilo nemoguće usporediti vizualnu kvalitetu prve i druge opcije. Trebalo je malo rada da se to učini, jer se neke stvari drugačije rješavaju u Unrealu i Unityju. Kao rezultat, dobili smo dvije vrlo slične scene.

Kako bismo ujedinili testiranje performansi, željeli smo koristiti identične modele stabla i zgrade u oba sustava. Za stabla smo koristili mobilni SpeedTree model, koji je uključivao samo oko 1000 poligona i omogućio je da se dobro procijeni kako mali koraci u prikazanim trokutima utječu na brzinu kadrova. Što se tiče animiranih zgrada, nismo uspjeli pronaći model za njih koji bi radio s oba motora, pa smo primijenili dva različita modela. Oba su dizajnirana za nešto više od 16.000 poligona svaki i imali su gotovo identične postavke materijala. Potpuno smo isključili razine detalja (LOD) tako da obje opcije prikazuju isti broj trokuta na bilo kojoj udaljenosti od kamere. Test je osmišljen ne samo da odrazi razlike u performansama između dva motora, već i da pokaže razliku u kvaliteti renderiranja. Osim toga, morao sam pomno pratiti standardne Unreal Engine shadere. Iako smo primijetili da Unreal izgleda znatno bolje, otkrili smo da postoji niz shadera koji rade u kameri koji su skupi u smislu performansi. Nakon što su ih ugasili, scena se vizualno nije puno promijenila. Rasvjeta je predstavljala sasvim drugačiji problem, pa nam je trebalo neko vrijeme da to ispravimo.

Kupce su zanimali ne samo testovi renderiranja, već i dojmovi razvoja prvog i drugog motora. Uostalom, koji je smisao produktivnosti ako ne možete napisati igru ​​na vrijeme. Da bismo ocrtali ta iskustva, također smo usporedili čimbenike kao što su vrijeme izrade, dostupna dokumentacija, složenost implementacije u mobilnom okruženju i složenost iteracija koda. Vjerovali smo da će Unity biti jači u ovim pokazateljima (kao perjanica u području razvoja mobilnih igara).

Projekt Jedinstvo

Prototip u Unityju. Na karti se nalazi 200 stabala

Dobro

  • Osnovni elementi Unityja su objekti (»GameObject«) i komponente (»MonoBehaviour«). Nakon što svladate ovaj koncept, spremni ste za rad s Unity-om. Ako se pravilno koristi, ovaj sustav može uvelike poboljšati organizaciju projekta.
  • Unity dolazi s mnogim komponentama koje vam pružaju sve što vam je potrebno za stvaranje igre - osim same logike igre. Kao što je gore spomenuto, komponenta može biti mala kao ravnina (ne u Unrealu) koju smo koristili za izgradnju mreže. Najnoviji dodaci motora su komponente »UI« i »Layout« koje omogućuju stvaranje moćnih i skalabilnih grafičkih korisničkih sučelja.
  • Urednik se može proširiti vašim vlastitim skriptama, a u Asset Storeu postoji mnogo resursa za sve prilike. Asset Store također sadrži mnogo korisnih skripti, modela materijala itd. Oni će biti posebno korisni pri izradi prototipa - jednostavno možete preuzeti sve što vam je potrebno kao privremene resurse i koristiti ih kao zgodne simulacijske modele.
  • Unity je bio jedan od prvih open source motora koji je podržao mobilni razvoj. Stoga je vrlo prikladan kada se koristi u mobilnom okruženju, tamo izgleda i djeluje na gotovo isti način kao u uređivaču. Sustav se stalno poboljšava i implementacija ide vrlo glatko. To je bio značajan faktor koji nas je naveo da se odlučimo za izradu mobilnog prototipa.
  • Unity se vjerojatno može pohvaliti najvećom zajednicom stručnjaka među svim motorima za igre, pa ako imate pitanje, najvjerojatnije će biti odgovora na njega. Iako Unity podržava mnoge skriptne jezike, dokumentacija za svaki je vrlo temeljita. Štoviše, čak i ako pronađete odgovor na drugom jeziku, logika tog odgovora će vam i dalje biti jasna, a možete ga prilagoditi kako biste riješili svoj problem.
  • Unity je napravio izvrstan posao optimizacije renderiranja za mnoge objekte istog tipa. Da biste postigli usporedivu izvedbu u Unrealu, morali biste koristiti instancirano renderiranje, a ovaj mehanizam je obično manje fleksibilan od renderiranja u Unity-u.

loše

  • Izvorni kod motora je zatvoren. Ako s Unityjem pregovarate o cijeni izvornog koda, onda se morate pomiriti s tim. Stoga su mogući problemi ako jedna ili druga značajka na koju se oslanjate ne uspije - morat ćete pričekati ažuriranje.
  • Novi UI sustav je prilično dobar. U njemu nema posebnog urednika, sve se promjene vrše upravo na sceni - a scena je vrlo velika. Kada otvorite scenu i želite urediti korisničko sučelje, prvo morate puno zumirati područje koje vas zanima.

Ovo je slika iz uređivača Unity. Imamo veliku sreću što smo to uspjeli nadopuniti vlastitim scenarijima.

Užasno

  • Postoje dva problema s novim UI sustavom u Unityju. Kada prstom pritisnete zaslon osjetljiv na dodir, nećete moći znati je li određena grafika pritisnuta. Recimo da korisnik želi pomicati zaslon pomoću klizača. Ali ako smo naslijedili klasu GraphicsRaycaster, tada možemo otvoriti sve željene podatke koji se mogu objaviti. Ako zamijenite GraphicsRaycaster u objektu platna, možete provjeriti je li kliknut element korisničkog sučelja.
  • Drugi problem s Unityovim korisničkim sučeljem odnosi se na skaliranje za različite veličine zaslona. U osnovi, objekt platna ima opcije skaliranja s nekim parametrima. Ali organizirati njihov pregled bilo je vrlo teško, morali smo nekoliko puta implementirati aplikaciju na uređaj dok nismo pokupili normalnu konfiguraciju.
  • Osim toga, bili smo vrlo zbunjeni Unityovim statističkim panelom. Nakon implementacije brojača broja sličica u igrici, usporedili smo njegovu vrijednost s onim što je prikazano na ploči statistike uređivača Unity. Ove vrijednosti su različite. Nakon pretraživanja interneta za drugim implementacijama, pronašli smo odgovor: ploča statistike daje procjenu koliko bi okvira igra izgubila da radi offline, a ne u editoru. Stoga je logika našeg brojača okvira bila apsolutno ispravna.

FPS vrijednosti 37 naspram 32. Na ploči statistike Unity vidimo procijenjene podatke za samostalnu aplikaciju koji se ne podudaraju sa stvarnim

Projekt Unreal

Evo kako projekt izgleda u Unreal editoru. Postoji mnogo specijaliziranih ugniježđenih uređivača, od kojih su neki po funkcionalnosti usporedivi s cijelim programima.

Ista snimka zaslona snimljena u UE-u kao u Unity-u (vidi gore), s mobilnim postavkama ostavljenim na zadanim postavkama, bez osvjetljenja stabla

Kad su se postavke prilagodile, stabla su bila bolja, ali još uvijek ne tako dobra kao u Unityju

Dobro

  • Probna verzija Unreala potpuno je besplatna. U njemu dobivate potpuno opremljen uređivač. Unity također ima besplatnu verziju, ali nadogradnja na Pro koštat će bogatstvo.
  • Unreal ima moćan uređivač koji uključuje nekoliko visoko specijaliziranih urednika. Ako ste upoznati s ovim "ugniježđenim" urednicima, oni će vam uvelike pomoći u vašem razvoju, a često će vam pružiti informacije koje nećete vidjeti u Unityju. Postoje uređivači koji čak mogu poslužiti i kao potpuna zamjena za neke programe. Interakcija svih ovih podsustava jednostavno je remek-djelo.
  • Motor dolazi sa svim izvornim kodom. Stoga možete kopati po njemu i razumjeti kako pojedini dijelovi funkcioniraju. Štoviše, čak možete popraviti greške u motoru ili sami nadopuniti njegovu funkcionalnost.
  • Vizualizacija u editoru je odlična. Samo oči bježe od obilja opcija renderiranja (vezanih, primjerice, na rasvjetu ili složenost shadera). Ovdje ćete pronaći mnoštvo najsuvremenijih shadera koji također dolaze s motorom. U osnovi, Unreal nudi najbolji mehanizam za renderiranje na tržištu. Možete stvoriti nevjerojatno lijepe scene.
  • Nacrti su zgodni za brzo stvaranje nečeg jednostavnog i implementaciju osnovne logike igre. Savršeno se integriraju s C++, a ova odluka nije donesena slučajno: ne samo da otvara najšire mogućnosti i početnicima i iskusnim programerima, već im omogućuje i međusobnu interakciju.
  • Ukupna integracija sa C++ je sjajna. Poput vrućeg ponovnog punjenja.

Nacrti su izvrsni za jednostavne zadatke, njihova integracija s C++ je fantastična. Ali ako je uključena složenija logika, onda brzo postaju nered i postaje teško nositi se s njima.

loše

  • Prilikom razvoja na Unreal Engineu, teško je podići tempo. Čak i ako vrlo dobro poznajete C++, trebat će vam puno vremena da naučite različite makronaredbe i funkcije UE4. To može biti vrlo teško za one koji u isto vrijeme uče C++.
  • Crteži se vrlo brzo mogu zbuniti. Kada logika uključuje desetke čvorova, od kojih svaki sadrži nacrt, ponekad se može pojednostaviti na nekoliko redaka koda napisanog u običnom C++. Obično to nije problem jer je savršeno moguće raditi s C++, ali s nekim stvarima, na primjer, »UMG« (UI sustav) morate koristiti nacrte, pa je moguća zabuna.
  • Mobilni simulator pokazao se vrlo nedosljednim. Dao je upozorenja kada smo pokušali koristiti funkcije shadera koje se ne koriste u mobilnom okruženju, ali čak i ako je shader prošao provjeru valjanosti, možda neće raditi. U principu, ovaj simulator je dobra stvar, ali njegove vizualne kvalitete ostavljaju mnogo poželjeti.
  • Iako Unreal ima veliku zajednicu programera, tamo rijetko dobivamo odgovore na pitanja. Uz to, gotovo sva podrška koja nam je pružena odnosila se na crteže. Unreal Engine 4 aktivno razvija zajednicu, već ide dobro, čini se da su stručnjaci željni razvoja i pomoći. Ali zajednica Unity je ipak bolja.

Užasno

  • Postoji ozbiljan nedostatak C++ dokumentacije. Mrežni referentni materijal za nastavu C++ je nezgodan. Osim toga, zbog stalnih ažuriranja, mnoge značajke brzo postaju zastarjele. Budite oprezni kada gledate videozapise pomoći jer oni mogu opisati zastarjelu verziju motora i značajke koje se više ne koriste.
  • U radu s GUI-jem koristili smo inovativni »UMG« sustav. Temelji se na nacrtima i može biti vrlo koristan. Uz malo rada uspjeli smo naslijediti klasu C++ i malo počistiti nacrte. Međutim, sustav je još uvijek grub, nedostaju mu neke kontrole, kao što su tipke za prebacivanje. Osim toga, postoji malo ili nimalo relevantne C++ dokumentacije. Urednik je pao nekoliko puta dok smo razvijali korisničko sučelje. Neočekivani kvarovi mogu koštati čitave sate radnog vremena, prilično su uznemirujući. Razvoj ovog sustava je u tijeku, ali zasad je daleko od savršenog.
  • Razvoj mobilnih uređaja uz Unreal je spor. Programu je potrebno jako dugo da se postavi na uređaj. Bilo je nekih vizualnih problema s Androidom, kao što su mutni obrisi i neosvijetljena stabla. U iOS-u su problemi bili puno ozbiljniji. UE4 podržava samo izgradnju za iOS uređaj ako se vaša aplikacija sastoji samo od nacrta. Appleova je greška, ali otišli smo do kraja na uvoz razvojnih ključeva (možete zamisliti) prije nego što smo naišli na ovaj problem. U iOS-u se nisu prikazivale teksture stabala izgrađenih na temelju SpeedTreea, stabla su bila siva i gola, bez lišća. Dakle, podrška za mobilni razvoj u Unityu značajno pobjeđuje u odnosu na Unreal.

Rezultati usporedbe. okvirna stopa

Iznenađujuće, kada smo testirali frame rate (FPS) na različitim uređajima, dobili smo vrlo različite rezultate. Na nekim je uređajima Unity pobijedio s bilo kojom konfiguracijom. U drugim je prilikama Unreal nadmašio Unity u testovima gdje je bilo puno zgrada. Uglavnom, Unreal je pobijedio, ali po visokoj cijeni. Kvaliteta slike i konzistentnost u Unityju bili su znatno bolji. Nestvarne teksture su na nekim uređajima izgledale mutno, stabla su ispala puno lošije. Razlika u kvaliteti dijelom je posljedica činjenice da se s jedne strane prikazuje u Unreal editoru i mobilnom pregledu, a s druge - na pravom mobitelu. Taj je problem posebno došao do izražaja kada je u pitanju scenska rasvjeta. Bilo je vrlo teško postaviti ispravne postavke da bi se svjetla ispravna, cijela postavka na mobilnim uređajima često je izgledala mračno. U tom smislu, Unity je bio puno dosljedniji, slika na bilo kojem pametnom telefonu bila je ista kao i pri pregledu u uređivaču.

Rezultati za oba motora su se pokazali puno boljim nego što smo očekivali (kao što se sjećate, naši su testni modeli imali oko 10 puta više trokuta nego u običnim mobilnim igrama).

U iOS-u su oba motora prikazivala animirane modele s približno istim uspjehom. Međutim, testovi s drvećem na ovom uređaju bili su neuvjerljivi, jer Unreal nije prikazao nikakve teksture na modelima stabala. Pokušali smo pronaći razlog za ovaj obrazac, ali ga nismo uspjeli riješiti. Osim toga, trebamo napomenuti da prilikom implementacije pomoću ovih motora morate imati pri ruci Apple računalo. To je vrlo nezgodno, ali sam Apple je kriv za ovu situaciju. Kupci su nas također zamolili da izvršimo benchmark testiranje na Windows Phoneu. Nažalost, Unreal još ne podržava implementacije na Windows telefonima, tako da Unity ovdje pobjeđuje po definiciji. Budući da Windows Phone trenutno zauzima vrlo mali tržišni udio, Unrealov razvoj u ovom smjeru ne smatra se prioritetom.

U konačnici, benchmarking je pokazao samo da su dva motora gotovo jednake snage. Stoga je posebno važno obratiti pozornost na specifične prednosti i nedostatke svakog od njih. Na kraju, ako su performanse tako blizu, onda pogodnost i brzina razvoja svakog od ovih motora dolazi do izražaja.

Ostali kontrolni parametri

Evo još nekoliko zanimljivih rezultata koje smo uspjeli saznati tijekom naših testova:

  • Oba motora gotovo se nisu razlikovala u potrošnji memorije. Na Android uređajima je Unity malo pobijedio, na iOS uređajima - Unreal.
  • Projekt Unity znatno je manji (Android: 42 MB / iOS: 100 MB) od Unreala (Android: 101 MB / iOS: 173 MB).
  • Unity je otprilike tri puta brži za implementaciju na uređaj. Osim toga, Unity puno brže kompilira kod.
  • Unreal je bio puno ekonomičniji u smislu trajanja baterije. Nakon dva sata rada sa 150 animiranih modela na ekranu, Unreal je uspio isprazniti Android bateriju za 42 posto, a iOS za 36 posto. Unity je potrošio otprilike 72 posto na Androidu i 47 posto na iOS-u za isto vrijeme postavljanja i rada.

zaključke

Prema rezultatima studije, jako nam se svidjelo u oba motora. Osim toga, pronašli smo mnoga područja u kojima se ovi alati mogu poboljšati kako bi se programeru olakšao rad. Niti jedan od motora nije imao značajniju prednost u odnosu na drugi, s obzirom na to koliko se brzo mijenjaju njihove sposobnosti i podrška. Testiranje renderiranja pokazalo je da oba proizvoda istiskuju maksimum iz uređaja i, u principu, prilično su usporedivi. Opet, u ovoj situaciji do izražaja dolazi upotrebljivost i intuitivnost razvoja. S obzirom na sve što smo naučili o ovim motorima i izazove s kojima smo se susreli tijekom razvoja, bili smo suočeni s teškim izborom, ali smo na kraju odabrali Unity.

Unatoč činjenici da smo se u početku kladili na pobjedu Unreal Enginea, Unity je trenutno dobitnija opcija, barem kada je u pitanju razvoj mobilnih igara.

Evo glavnih razloga naše odluke:

  • Unity izgleda vizualno dosljednije na svim uređajima i brzo se implementira jednim klikom na bilo kojoj platformi.
  • Unity zauzima puno manje prostora na uređaju, manje utječe na iskustvo krajnjeg korisnika. Kompaktna veličina posebno je važna u trgovini Google Play, gdje se APK mora podijeliti na dijelove ako je ova datoteka veća od 50 mb.
  • Jedinstvo je puno lakše naučiti i razumjeti. Naoružani Unity-om, neiskusni korisnik može se brže pokrenuti i graditi proizvode koje podržava velika zajednica stručnjaka.
  • Vrijeme iteracije u Unity-u je puno kraće (primjena i kompilacija izvornog koda je brža, shaderi se kompiliraju gotovo trenutno)

Želimo naglasiti da naše rezultate treba promatrati u kontekstu izrađenog prototipa. Ono što radi za jednu tvrtku možda neće raditi za drugu. Osim toga, postoji mnogo više motora za igre, od kojih bi neki mogli biti prikladniji za vaš specifični zadatak. U nekim tvrtkama, s dovoljno vremena i resursa, možda čak ima smisla napisati vlastiti motor. U razvoju igara ne postoji jedinstveno rješenje za sve. Učinite sebi uslugu i eksperimentirajte kako treba. Štoviše, mnogi od njih postaju jeftiniji ili čak postaju shareware poput Unreala. Nećemo se iznenaditi ako Unity također slijedi Unrealovo vodstvo i liberalizira model određivanja cijena.

Zaključak

Zanimljivo je napomenuti da su nam dečki iz Bit Baronsa savjetovali da prije izrade prototipa uzmemo Unreal Engine za naš projekt. S obzirom da smo mi u OFM-u u početku preferirali Unreal Engine, možda se konačno rješenje pokazalo neoptimalnim.

Naravno, nije lako dizajnirati, napisati i testirati prototip, pogotovo ako se samo trebate odlučiti za motor za projekt. Ali pitanje takvog izbora je kritično važno.

Konačno, uzeli smo u obzir još neke čimbenike koji bi mogli promijeniti naše mišljenje. Naime: koliko je u ovom trenutku lako pronaći iskusne stručnjake za svaki motor i koji su poslovni modeli dostupni?

O kadrovskom pitanju konzultirali smo se s iskusnim regruterima kako bismo saznali više-manje stvarne brojke. Trenutno postoje otprilike četiri Unity profesionalca za svakog stručnjaka za Unreal. Što se poslovnog modela tiče, Unreal ne daje početnu fiksnu naknadu, ali zahtijeva autorske naknade. U Unityju je sve upravo suprotno. Oba ova faktora bila su nam važna, a kao rezultat toga, ipak smo se odlučili na Jedinstvo.

Dakle, izgradnja baze u strategiji. Parametri koji su uključeni u ovaj proces mogu biti vrlo različiti. Možda zlato ili minerali, dostupnost energije i tako dalje. Svaki projekt može imati nešto individualno, međutim svima je zajedničko sama izgradnja, odnosno uređenje objekata na određenom prostoru. Što trebamo učiniti? Prvo, imamo skup ikona, od kojih svaka predstavlja zgradu. Kada kliknete na ikonu, dobivamo praznu građu koja se može pomicati duž XZ ravnine. Drugo, morate osigurati da se nove zgrade ne mogu stvarati tamo gdje već postoji zgrada i gdje je zabranjeno bilo što graditi.


Ova je opcija prikladna samo za 3D, za dvodimenzionalni projekt potrebno je ponoviti raycast i ravninu kretanja objekata.

Trening. Izrada samih zgrada, maketa zgrada. Kako će biti animirani i tako dalje - nije važno, glavni model mora biti ispod sudarača, to je potrebno ne samo za konstrukciju, već i za izradu navigacijske karte za botove. Na primjer:

Udarač mora pokriti cijeli objekt.

Nakon izrade glavne strukture, izrađujemo njenu kopiju i zamjenjujemo materijal. To jest, zadatak je stvoriti pregled buduće zgrade. U bilo kojoj strategiji prvo povlačimo izgled zgrade, obično ih čini prozirnim. Budući da je ovo izgled, uklanjamo animaciju na njemu ako postoji i odabiremo izgled, na primjer:


Na isti način, objekt mora biti zatvoren sudaračem, ali u načinu rada Je Trigger. U ovom slučaju, sudarač izgleda može biti malo veći od originala, za +0,1 na primjer, to će povećati osjetljivost i osigurati da je nemoguće stvoriti jedan objekt iznad drugog. Svi izgledi moraju imati postavljen sloj Ignore Raycast! Uz to, visimo na modelu Kruto tijelo i isključi gravitaciju. Osim toga, objesimo malu skriptu MaskControl:

Korištenje UnityEnginea; korištenje System.Collections; javna klasa MaskControl: MonoBehaviour ( javni string respawnTag = "Respawn"; void Start() ( DragAndDrop.isOn = true; ) void OnTriggerStay(Collider coll) ( if(coll.tag != respawnTag) ( DragAndDrop.isOn) = netočno ) void OnTriggerExit( Collider coll) ( if(coll.tag != respawnTag) ( DragAndDrop.isOn = true; ) ) )
Zadatak ove skripte je odrediti gdje se objekt može instalirati, a gdje ne. U varijablu respawnTag navodimo oznaku koja omogućuje instalaciju. Recimo, ako napravite avion s oznakom, tada se zgrada može graditi samo na ovom području, a ako objekt naleti na druge zgrade, automatski će se blokirati. Općenito, sve je kao obična strategija.

Dalje, nazivi zgrada. Izvorni montažni objekti su nazvani ovako id_xxx, tj. - broj, donje crte, ime. Prefabs izgleda imaju potpuno isti naziv, originalni brojevi i brojevi izgleda - moraju se podudarati, a nazivi se mogu razlikovati.

Sada objesimo skriptu na prazan objekt Povuci i ispusti:

Korištenje UnityEnginea; korištenje System.Collections; korištenje sustava; javna klasa DragAndDrop: MonoBehaviour ( javni Transform original; javna maska ​​transformacije; javni float shift = 0.01f; javni string respawnTag = "Respawn"; javni statički bool isOn; privatni Transform original_tmp; privatni Transform mask_tmp; privatni Vector3 curPos; void Start() ( isOn = false; ) public void SetMask(int id) ( foreach(Transform obj u original) (naziv niza = obj.name.Split(new char ("_"), StringSplitOptions.RemoveEmptyEntries); if(id.ToString( ) == naziv) ( original_tmp = Instantiate(obj); original_tmp.gameObject.SetActive(false); ) ) foreach(Transformiraj obj u masku) (naziv niza = obj.name.Split(new char ("_"), StringSplitOptions .RemoveEmptyEntries); if(id.ToString() == ime) ( mask_tmp = Instantiate(obj); ) ) ) void Update() (RaycastHit pogodak; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if ( Physics.Raycast(ray, out hit)) ( curPos = hit.point + hit.normal * shift; ) if(mask_tmp) ( mask_tmp.position = curPos; if (Input.GetAxis("Mouse ScrollWheel") > 0) ( mask_tmp.localEulerAngles += novi Vector3(0, 45, 0); ) if(Input.GetAxis("Kotačić za pomicanje miša")< 0) { mask_tmp.localEulerAngles -= new Vector3(0, 45, 0); } if(Input.GetMouseButtonDown(0) && isOn) { original_tmp.gameObject.SetActive(true); original_tmp.position = mask_tmp.position; original_tmp.localEulerAngles = mask_tmp.localEulerAngles; original_tmp = null; isOn = false; Destroy(mask_tmp.gameObject); } else if(Input.GetMouseButtonDown(1)) { Destroy(original_tmp.gameObject); Destroy(mask_tmp.gameObject); } } } }
izvornik- niz svih montažnih objekata s originalnim modelima zgrada.

maska- niz svih montažnih izgleda.

pomak- pomak osi Y za model.

respawnTag- oznaka aviona na kojem je dopuštena gradnja.

Moramo ih dodati nekoliko na pozornicu. korisničko sučelje elementi, točnije ikone, GameObject > UI > Image. Izrađujemo potreban broj ikona, postavljamo ih po potrebi. Zatim na svaku ikonu trebate dodati komponentu Okidač događaja, odaberite funkciju Kliknite na pokazivač a zatim povucite objekt sa DragAndDrop skriptom u aktivno polje i odaberite funkciju skripte iz izbornika - setmaska i naznačiti broj rasporeda. Na primjer:


Odnosno, poenta je da svaka ikona odgovara određenom modelu, pa dodjeljujemo brojeve. U igri kliknite na ikonu - pošaljite broj u skriptu - ona će pronaći odgovarajući model. Tako to funkcionira.

LMB na ikoni - dohvatite izgled zgrade. Ponovljeni LMB - postavite zgradu. RMB - otkazati. Kotačić miša - rotirati.

Vrhunski povezani članci