Kako stvoriti osnovnu Android igru ​​s Unity

u ovom sličnom vodiču prelazit ćemo o tome kako stvoriti osnovno Android igra koja koristi Unity.



Zahtjevi:

  • Jedinstvo
  • Dobar uređivač teksta kao što je NotePad ++ (nije obavezno, ali se preporučuje)
  • Android SDK
Ako ga još nemate, trebali biste započeti s preuzimanjem i instaliranjem Unity SDK-a i Android SDK-a. Android SDK nam je potreban da bismo mogli testirati APK igre u Android okruženju.

Pokrenite Unity i stvorite novi projekt. Neka to bude 2D projekt.



Postoji nekoliko ploča s kojima se trebate upoznati - ploča Hijerarhija koja će sadržavati sve naše elemente scene (scena = bilo koja 'razina' na kojoj trenutno radite). Zatim tu je kartica Igra koja se koristi za igranje / testiranje vaše igre dok ste unutar uređivača, a s desne strane imate ploču Inspektor na kojoj ćete uređivati ​​razne stvari poput osvjetljenja, fizike itd.



Prvo što želimo učiniti je stvoriti sprite - ovo će biti naš glavni lik (koji kontroliramo). Možete nacrtati vlastiti sprite, poput crtanja kvadrata očima, ili možete zgrabiti sprite s interneta - samo provjerite je li to .PNG datoteka (prozirna pozadina).



Povucite i ispustite svoj sprite na glavni prozor scene (najveći prozor) - on će se također pojaviti na ploči Hijerarhija s lijeve strane.

Dakle, sada ćemo stvoriti nekoliko platformi - to mogu biti jednostavni kvadratići, jer ćemo ih moći lako promijeniti kako bismo napravili zidove i druge platforme.

Dakle, samo stvorite novi kvadratni 'sprite' i povucite ga i ispustite na prozor Scene kao što ste to učinili sa svojim sprite likom.



Sada moramo uputiti Unity da fiziku da našem glavnom liku - kliknite na svoj glavni lik sprite (trebao bi biti označen plavom bojom u prozoru Scene), a zatim na ploči Inspector potražite 'GameObjects'.

Kliknite 'Dodaj komponentu> Fizika 2D> RigidBody2D'. To će automatski dodati fiziku vašem spriteu, što biste inače morali sami skriptirati u drugom SDK-u.

Želimo spriječiti da se glavni lik spritea vrti van kontrole - zato pronađite karticu Ograničenja na ploči Inspector (s glavnim spriteom koji je i dalje istaknut u prozoru Scene) i označite okvir za 'Zamrzni rotaciju Z'.

Ako pritisnete gumb 'Reproduciraj', vaš glavni lik spritea trebao bi pasti s neba i jednostavno beskrajno pasti - za to ćemo se pobrinuti kasnije, ali samo imajte na umu kako smo lako mogli primijeniti fiziku. Fizika koju smo primijenili ovisi o obliku na koji se primjenjuje - pa ako primijenite istu fiziku na kuglu, na primjer, ona bi se okrenula.

Također želimo popraviti svoju orijentaciju kako bismo spriječili da se lik okreće i okreće. Pronađite 'ograničenja' u inspektoru s odabranim igračem i označite okvir za zamrzavanje rotacije Z. Sada ponovno kliknite 'reproduciraj' i trebali biste pronaći da vaš igrač sada pada s neba u svoju beskonačnu propast.

Kako bismo spriječili da naš glavni lik spritea samo beskrajno pada, morat ćemo dodati sudarač. Ovo je u osnovi samo čvrsti obris oblika koji ćemo dodati glavnom liku spriteta. Označite svoj glavni lik spritea, kliknite “Dodaj komponentu> Fizika 2D> BoxCollider2D.

Sada učinite istu stvar s platformom koju ste ranije stvorili. Vaš glavni lik spritea sada bi se trebao 'sudariti' s platformom i ostati tamo.

Stoga sada želimo biti sigurni da će kamera slijediti vašeg glavnog sprite lika - unutar scene već bi trebao biti objekt kamere. Želiš ovo povući na vrhu glavni lik spriteta.

To je osobito važno ako stvarate 3D trkač , nešto kao Nagib gdje vam je potrebna kamera da bi stalno ostala iza primarnog objekta igre (vašeg glavnog spriteta).

Sada idite na ploču Hijerarhija i na popisu GameObjects želite povući kameru ispod glavni lik spriteta (Player GameObject). To će glavni lik spritea učiniti ' roditelj' kamere. Dakle, kad god se Player GameObject kreće oko zaslona, ​​kamera bi trebala slijediti.

Dakle, za ovaj tutorial igre, mi ćemo samo stvoriti osnovnu beskrajnu igru ​​tipa trkača, otprilike Trčanje 3 , gdje će vaš glavni lik trčati preko ekrana i izbjegavati prepreke (ili 'igra preko' ako udarite u prepreku '. Za to će trebati nekoliko skripti, od kojih će većina biti pružena u ovom vodiču.)

Desnom tipkom miša kliknite mapu 'Imovina' i stvorite novu mapu - nazovite je Skripte . Sada desnom tipkom miša kliknite ovu novu mapu i pritisnite 'Create> C # Script' i dodajte joj ime PlayerControls . Ova će skripta definirati ponašanje našeg glavnog sprite lika.

Kada dvaput kliknete na ovu novu skriptu, to treba otvorite u Visual Studiju - alternativno (i prema mojim osobnim preferencijama) možete ga urediti u nečemu poput NotePad ++.

Datoteka skripte već bi trebala imati malo koda 'ploče kotla' - u osnovi ovo je skripta koju treba ostaviti na miru ili je jednostavno prilagoditi vašim potrebama i uštedjet će nam puno vremena. Pa ćemo dodati novi objekt.

Iznad crte void Start ():

javnost Rigidbody2D rb;

Sljedeći bit koda koji trebamo dodati ući će u Start () i koristi se za pronalaženje krutog tijela - u osnovi nalažemo Unityu da pronađe fiziku koju smo pridružili GameObjects (naš glavni lik spriteta) i Start () izvršit će se kada se kreira novi objekt ili skripta.

Sljedeće, pronađite fizički objekt.

rb = GetComponent< Čvrsto tijelo2D > ();

I vi ćete dodati ovaj redak unutar Update ()

rb.brzina = novi Vector2 (3, rb.velocity.y);

Ono što Update () radi je stalno osvježavanje, tako da će se svaki tamo dodan kôd izvoditi kontinuirano (osim ako je objekt uništen). Dakle, ono što smo učinili je uputiti skriptu da želimo da kruto tijelo ima novi vektor koristeći istu brzinu na Y osi (rb.velocity.y), ali brzinom od 3 na vodoravnoj osi. U budućnosti možete koristiti i ‘ FixedUpdate () ’ što je slično, ali različito, jer tamo možete kontrolirati količinu ažuriranja / osvježavanja skripte.

Spremite skriptu i vratite se u Unity, a zatim kliknite svoj glavni lik sprite da biste je istaknuli. Na ploči Inspector idite na Add Component> Scripts i dodajte skriptu koju smo upravo spremili. Sada kada kliknete gumb Reproduciraj, glavni lik spritea trebao bi se kontinuirano kretati prema rubu platforme.

Stvaranje kontrola ulaza igrača

Pa zato što je ovo beskrajna igra u stilu trkača s preprekama, trebamo dodati kontrole za igrača kao što je gumb za skok.

Ponovno otvorite skriptu od prije, a mi ćemo dodati ovaj dodatni kôd:

 ako (Input.GetMouseButtonDown (0)) {rb.velocity = novi Vector2 (rb.velocity.x, 5); }

To ćete staviti u metodu Update (), a ono što zapravo čini jest reći Unityju da će, kad igrač klikne njihov gumb miša (što će biti prevedeno kao dodir zaslona na Androidu), glavni lik spritea 'skočiti'. ' u zraku. To je zato što smo dodali brzinu na Y osi s vrijednošću 5 (veća vrijednost bi značila veći skok, naravno).

Ako niste previše upoznati s kodiranjem, koristili smo Ako izjava jer Ako je u osnovi vrsta 'učini ili ne učini' - doslovno kaže AKO SE to dogodi, napravite ovu naredbu . Dakle, ako igrač ne klikne mišem (ili ne dodirne njihov zaslon Androida), tada se očito skripta neće pokrenuti.

Samo naprijed i kliknite gumb 'Reproduciraj' i provjerite radi li ispravno prije nastavka.

Dalje ćemo dodati naše prepreke (koje mogu 'uništiti' glavni lik), rezultat igre i izbornik 'game over'.

Ako ste dosad testirali igru, jedini problem koji imamo do sada je taj što ćemo pritiskom na gumb 'skok' koji smo stvorili preskočiti lik bez obzira jesu li utemeljeni ili ne - ovo je u osnovi Flappy Birds, a ne trkač poput mi želimo. Ali to ćemo popraviti.

U skriptu dodajte ovaj dio koda iznad metoda Update ():

 javnost Transform groundCheck; javnost Transformacija startPosition; javnost   plutati groundCheckRadius; javnost LayerMask whatIsGround; privatni   bool na zemlji; A zatim dodajte sljedeći redak u metodu Ažuriranje iznad ako izjava: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); I sljedeće ćete promijeniti ovaj sljedeći redak tako da uključuje '&& onGround' ako (Input.GetMouseButtonDown (0) && onGround) {Dakle, cijela naša skripta bi u osnovi trebala izgledati ovako: javnost   razred   PlayerControls : MonoBehaviour { javnost Rigidbody2D rb; javnost Transform groundCheck; javnost Transformacija startPosition; javnost   plutati groundCheckRadius; javnost LayerMask whatIsGround; privatni   bool na zemlji; poništiti   Početak () {rb = GetComponent (); } poništiti   ažuriranje () {rb.brzina = novi Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); ako (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = novi Vector2 (rb.velocity.x, 5); }}}

Da bismo objasnili što smo učinili, stvorili smo novu 'transformaciju', što znači položaj u prostoru svijeta igre. Postavili smo njegov radijus i upućujemo Unity da provjeri preklapa li se radijus s našim slojem 'tla' - pa ako je naš radijus sinkroniziran sa 'tlom', naš bi lik trebao moći skakati i ako Već smo u zraku od skoka, ne bismo trebali moći skočiti ponovo. U osnovi, na zemlji bit će istina ako imenovana transformacija groundCheck preklapa se sa prizemnim slojem. Nadam se da to ima smisla.

Zato spremite skriptu i vratite se u Unity, a primijetit ćete da je Inspektoru dodano više opcija nakon što ste istaknuli player. To su javne varijable i možemo ih prilagoditi prema vlastitim željama.

Sada desnom tipkom miša kliknite Hijerarhiju i stvorite novi prazan objekt te ga povucite tako da ispod njegovog spriteta glavnog lika u glavnom prozoru Scene - postavite ovaj prazan objekt tamo gdje želimo da se detektira pod. Preimenujte objekt u 'Check Ground', a zatim ga povucite ispod predmeta igre igrača, kao što smo to ranije učinili s kamerom (da bismo stvorili odnos roditelja i djeteta između predmeta). Sada će prazan objekt slijediti sprite glavnog lika, baš kao i kamera, i kontinuirano će provjeravati podnu udaljenost.cam

Sada odaberite sprit glavnog lika i idite na ploču Inspector - povucite objekt Check Ground u prostor nazvan 'groundCheck'. Položaj 'transformacije' trebao bi biti jednak položaju ovog novog objekta, a tamo gdje piše 'Radijus', neka bude 0,1.

Moramo definirati prizemni sloj. Samo odaberite prizemni teren i u Inspektoru pronađite gumb za 'Layer: Default' (to je padajući okvir) i odaberite 'Add Layer'.

Sada odaberite 'ground' kao sloj za našu platformu i ponovite to za sve druge platforme u prozoru igre. Tamo gdje stoji 'Što je tlo' na našem objektu spritea s glavnim likom, odaberite i sloj tla.

Ono što smo učinili je uputiti skriptu playera da izvrši provjeru - ako mala točka na zaslonu preklapa se s bilo čime što odgovara sloju, lik će skočiti samo ako je to istina.

Igra je završena na izborniku sudara i igre

Dakle, da bismo sve zaključili, posljednje stvari koje želimo učiniti su A: Neka sudar s preprekama rezultira igrom i B: Stvorite zaslon izbornika 'game over' s gumbom za ponovnu igru.

Ono što u osnovi želite učiniti je:

  1. Dodati Igrač objekt i dodijeliti a kruto tijelo i a sudarač po vašem izboru.
  2. Dodajte znak Neprijatelj objekt i dodijeliti a kruto tijelo i a sudarač po vašem izboru. (i neobvezno, dodati Oznaka 'Neprijatelj' do toga)
  3. Stvori novo C # skripta i dodajte ga kao komponentu u Igrač (ili upotrijebite bilo koju skriptu priloženu uz player, nema potrebe za izradom nove ako je već imate)
  4. Dodajte ovo u svoju skriptu:
poništiti OnCollisionEnter ( Sudar coll) { Otklanjanje pogrešaka . Dnevnik ('Sudar'); // Provjerite registrira li uopće sudar, ako djeluje, možete ukloniti ovu liniju if (coll.gameobject. označiti == 'Neprijatelj') { // vidi ima li objekt s kojim se igrač sudarao oznaku pod nazivom 'Neprijatelj