Kā izveidot pamata Android spēli ar Unity

šajā līdzīgajā apmācībā mēs izskatīsim, kā izveidot pamata informāciju Android spēle, izmantojot Vienotību.



Prasības:

  • Vienotība
  • Labs teksta redaktors, piemēram, NotePad ++ (pēc izvēles, bet ieteicams)
  • Android SDK
Ja jums to vēl nav, vispirms vispirms lejupielādējiet un instalējiet Unity SDK, kā arī Android SDK. Mums ir nepieciešams Android SDK, lai mēs varētu pārbaudīt spēles APK Android vidē.

Palaidiet vienotību un izveidojiet jaunu projektu. Padariet to par 2D projektu.



Ir vairāki paneļi, ar kuriem iepazīties - hierarhijas panelis, kurā būs visi mūsu ainas elementi (aina = neatkarīgi no tā, kādā līmenī jūs pašlaik strādājat). Tad ir cilne Spēle, kas tiek izmantota spēles spēlēšanai / testēšanai redaktora iekšpusē, un labajā pusē ir Inspektora panelis, kurā rediģēsit dažādas lietas, piemēram, apgaismojumu, fiziku utt.



Pirmā lieta, ko mēs vēlamies darīt, ir izveidot sprītu - tas būs mūsu galvenais varonis (kuru mēs kontrolējam). Jūs varat vai nu uzzīmēt savu sprite, piemēram, vienkārši uzzīmēt kvadrātu ar acīm, vai arī paķert sprite no interneta - vienkārši pārliecinieties, ka tas ir .PNG fails (caurspīdīgs fons).



Velciet un nometiet spriteju uz galvenās ainas loga (lielākais logs) - tas parādīsies arī pa kreisi esošo Hierarhijas paneli.

Tāpēc tagad mēs izveidosim dažas platformas - tie var būt vienkārši kvadrāti, jo mēs varēsim tos viegli mainīt, lai izveidotu sienas un citas platformas.

Tāpēc vienkārši izveidojiet jaunu kvadrātu “sprite” un velciet un nometiet to uz ainas loga, tāpat kā jūs to darījāt ar savu sprite raksturu.



Tagad mums ir jāuzdod Unity dot fiziku mūsu galvenajam varonim - noklikšķiniet uz sava galvenā sprite varoņa (logā Scene tas ir jāizceļ zilā krāsā), pēc tam Inspector panelī atrodiet “GameObjects”.

Noklikšķiniet uz “Pievienot komponentu> Fizika 2D> RigidBody2D”. Tas jūsu spritei automātiski pievienos fiziku, kas citādi jums būtu jāraksta pats citā SDK.

Mēs vēlamies novērst to, ka galvenais sprite raksturs bez kontroles var griezties apkārt - tāpēc Inspektora panelī atrodiet cilni Ierobežojumi (ar galveno sprite joprojām ir iezīmēts logā Sižets) un atzīmējiet izvēles rūtiņu “Freeze Rotation Z”.

Ja nospiedīsit pogu “Atskaņot”, jūsu galvenajam sprite varonim vajadzētu nokrist no debesīm un vienkārši bezgalīgi nokrist - mēs par to parūpēsimies vēlāk, bet vienkārši ņemiet vērā, kā mēs viegli varējām pielietot fiziku. Fizika, kuru mēs izmantojam, ir atkarīga no formas, kurai tie tiek piemēroti, tādēļ, piemēram, ja jūs to pašu fiziku lietojat sfērai, tā varētu apiet.

Mēs arī vēlamies noteikt savu orientāciju, lai nepieļautu, ka raksturs griežas un pārvietojas brīvi. Inspektorā atrodiet ‘ierobežojumus’ ar izvēlēto atskaņotāju un atzīmējiet izvēles rūtiņu, lai iesaldētu rotāciju Z. Tagad noklikšķiniet vēlreiz uz Play, un jums jāatrod, ka jūsu spēlētājs tagad nokrīt no debesīm uz viņa bezgalīgo likteni.

Lai nepieļautu, ka mūsu galvenais sprite varonis vienkārši bezgalīgi krīt, mums būs jāpievieno koladers. Tas būtībā ir tikai stingrs formas izklāsts, ko mēs pievienosim galvenajam sprite varonim. Iezīmējiet savu galveno sprite rakstzīmi, noklikšķiniet uz “Pievienot komponentu> Fizika 2D> BoxCollider2D.

Tagad dariet to pašu precīzi ar iepriekš izveidoto platformu. Jūsu galvenajam sprite varonim tagad vajadzētu “sadurties” ar platformu un palikt tur.

Tāpēc tagad mēs vēlamies pārliecināties, ka kamera sekos jūsu galvenajam sprite varonim - ainas iekšpusē jau vajadzētu būt kameras objektam. Jūs vēlaties to vilkt virs galvenais sprite varonis.

Tas ir īpaši svarīgi, ja veidojat 3D balstīts skrējējs , kaut kas kā Slīpums kur jums ir nepieciešama kamera, lai pastāvīgi paliktu aiz galvenā spēles objekta (jūsu galvenā sprite varoņa).

Tagad dodieties uz Hierarhijas paneli un GameObjects sarakstā vēlaties vilkt kameru apakšā galvenais sprite varonis (Player GameObject). Tas padarīs galveno sprite varoni par vecāks ’ kameras. Tāpēc ikreiz, kad Player GameObject pārvietojas pa ekrānu, kamerai vajadzētu sekot.

Tāpēc šai spēles apmācībai mēs vienkārši izveidosim nebeidzamu skrējēja tipa pamata spēli, kaut ko līdzīgu 3. skrējiens , kur jūsu galvenais varonis izskries pa ekrānu un izvairīsies no šķēršļiem (vai “nospēlējot spēli”, ja trāpīsit šķērsli.) Tam būs vajadzīgi daži skripti, no kuriem lielākā daļa tiks sniegta šajā rokasgrāmatā.

Ar peles labo pogu noklikšķiniet uz mapes “Aktīvi” un izveidojiet jaunu mapi - nosauciet to Skripti . Tagad ar peles labo pogu noklikšķiniet uz šīs jaunās mapes un nospiediet “Izveidot> C # skriptu” un nosauciet to PlayerControls . Šis skripts definēs mūsu galvenā sprite rakstura uzvedību.

Veicot dubultklikšķi uz šī jaunā skripta, uz tā vajadzētu atvērt Visual Studio - kā alternatīvu (un manas personīgās izvēles), to var rediģēt kaut kādā veidā, piemēram, NotePad ++.

Skripta failā jau vajadzētu būt mazliet “boil plate” kodam - būtībā tas ir skripts, kas jāatstāj viens pats vai vienkārši jāpielāgo jūsu vajadzībām, un tas ietaupīs mums daudz laika. Tāpēc mēs pievienosim jaunu objektu.

Virs līnijas anulēt Start ():

publiski Rigidbody2D rb;

Nākamais koda bits, kas mums jāpievieno, nonāks Startā (), un tas tiek izmantots, lai atrastu stingru ķermeni - būtībā mēs uzdodam Unity atrast fiziku, kuru esam pievienojuši GameObjects (mūsu galvenais sprite raksturs), un Sākt () tiks izpildīts, kad tiks izveidots jauns objekts vai skripts.

Tālāk atrodiet fizikas objektu.

rb = GetComponent< Rigidbody2D > ();

Un jūs pievienosiet šo rindu iekš Update ()

rb.velocity = jauns Vector2 (3, rb.velocity.y);

Tas, ko dara Update (), tiek pastāvīgi atsvaidzināts, tāpēc jebkurš tur pievienotais kods darbosies nepārtraukti (ja vien objekts netiek iznīcināts). Tātad, mēs esam paveikuši, norādot skriptam, ka mēs vēlamies, lai cietajam ķermenim būtu jauns vektors, izmantojot tādu pašu ātrumu uz Y ass (rb.velocity.y), bet ar ātrumu 3 uz horizontālās ass. Nākotnē varat izmantot arī FixedUpdate () ” kas ir līdzīgs, bet atšķirīgs, jo tur jūs varat kontrolēt skripta atjaunināšanas / atsvaidzināšanas daudzumu.

Saglabājiet skriptu un atgriezieties Unity, pēc tam noklikšķiniet uz sava galvenā sprite rakstzīmes, lai to izceltu. Inspektora panelī dodieties uz Pievienot komponentu> Skripti un pievienojiet tikko saglabāto skriptu. Tagad, noklikšķinot uz pogas Atskaņot, galvenajam sprite varonim vajadzētu nepārtraukti virzīties uz platformas malu.

Spēlētāja ievades vadīklu izveide

Tāpēc, ka šī ir bezgalīga skrējēja stila spēle ar šķēršļiem, mums spēlētājam jāpievieno tādas vadības ierīces kā poga ‘lēkt’.

Atkārtoti atveriet skriptu iepriekš, un mēs pievienosim šo papildu kodu:

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

Jūs to ievietosiet atjaunināšanas () metodē, un tas, ko tā būtībā dara, ir pateikt Vienotībai, ka tad, kad spēlētājs noklikšķina uz peles pogas (kas tiks tulkots kā ekrāna pieskāriens Android ierīcē), galvenais sprite raksturs 'lec ' gaisā. Tas ir tāpēc, ka mēs esam pievienojuši ātrumu uz Y ass ar vērtību 5 (protams, lielāka vērtība nozīmētu lielāku lēcienu).

Ja jūs neesat pārāk pazīstams ar kodēšanu, mēs izmantojām Ja paziņojums, jo Ja būtībā ir “darīt vai nedarīt” veida instrukcija - tās burtiskā teikšana JA tas notiek, izpildiet šo komandu . Tātad, ja atskaņotājs neklikšķina uz peles (vai nepieskaras Android ekrānam), acīmredzot skripts nedarbosies.

Pirms turpināt, noklikšķiniet uz pogas “Atskaņot” un pārliecinieties, ka tā darbojas pareizi.

Tālāk mēs pievienosim savus šķēršļus (kas var 'iznīcināt' galveno varoni sprite), spēles rezultātu un izvēlni 'spēle beidzas'.

Ja jūs pārbaudījāt spēli līdz šim, vienīgā problēma, kas mums ir līdz šim, ir tāda, ka, nospiežot mūsu izveidoto pogu “lēkt”, raksturs tiks pārlēkts neatkarīgi no tā, vai viņi ir pamatoti vai nē - tas būtībā ir Flappy Birds, nevis tāds skrējējs kā mēs gribam. Bet mēs to labosim.

Skriptā pievienojiet šo koda bitu virs metode Update ():

 publiski Pārveidot groundCheck; publiski Pārveidot startPosition; publiski   peldēt groundCheckRadius; publiski LayerMask whatIsGround; Privāts   bool onGround; Un pēc tam pievienojiet šo nākamo rindu atjaunināšanas metodei virs ja paziņojums: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Pēc tam jūs mainīsit šo sekojošo rindiņu, iekļaujot “&& onGround” ja (Input.GetMouseButtonDown (0) && onGround) {Tātad visam mūsu skriptam vajadzētu būt šādam: publiski   klasē   PlayerControls : Vienkārša uzvedība { publiski Rigidbody2D rb; publiski Pārveidot groundCheck; publiski Pārveidot startPosition; publiski   peldēt groundCheckRadius; publiski LayerMask whatIsGround; Privāts   bool onGround; spēkā neesošs   Sākt () {rb = GetComponent (); } spēkā neesošs   Atjaunināt () {rb.velocity = jauns Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); ja (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = jauns Vector2 (rb.velocity.x, 5); }}}

Lai izskaidrotu mūsu paveikto, mēs esam izveidojuši jaunu “pārveidojumu”, kas nozīmē pozīciju spēļu pasaules telpā. Mēs esam iestatījuši tā rādiusu un uzdodam Vienotībai pārbaudīt, vai rādiuss pārklājas ar mūsu “zemes” slāni - un tāpēc, ja mūsu rādiuss ir sinhronizēts ar “zemi”, mūsu varonim vajadzētu būt iespējai lēkt, un, ja mēs Mēs jau esam gaisā no lēciena, mums nevajadzētu atkal lēkt. Būtībā onGround būs patiess ja nosauktais pārveidojums groundCheck pārklājas ar zemes slāni. Cerams, ka tam ir jēga.

Tāpēc saglabājiet skriptu un atgriezieties Unity, un jūs pamanīsit, ka pēc atskaņotāja iezīmēšanas inspektoram ir pievienotas citas opcijas. Tie ir publiski mainīgie, un mēs tos varam pielāgot pēc savas gaumes.

Tagad ar peles labo pogu noklikšķiniet uz Hierarhija un izveidojiet jaunu tukšu objektu un velciet to tā, lai tas zem galvenā varoņa sprīdētu galvenajā Ainas logā - novietojiet šo tukšo objektu tur, kur mēs vēlamies atklāt grīdu. Pārdēvējiet objektu uz “Check Ground” un pēc tam velciet to zem spēlētāja spēles objekta, kā mēs to darījām iepriekš ar kameru (lai izveidotu vecāku un bērnu attiecības starp objektiem). Tagad tukšais objekts sekos galvenajam varonim, tāpat kā kamera, un tas nepārtraukti pārbaudīs grīdas attālumu. Kamera

Tagad atlasiet galveno rakstzīmi sprite un dodieties uz paneli Inspector - velciet objektu Pārbaudīt zemi telpā ar nosaukumu “groundCheck”. Pozīcijai “pārveidot” jābūt vienādai ar šī jaunā objekta pozīciju, un tur, kur teikts “Radius”, padariet to par 0,1.

Mums jādefinē zemes slānis. Vienkārši atlasiet zemes reljefu un Inspektorā atrodiet pogu “Layer: Default” (tas ir nolaižamais lodziņš) un izvēlieties “Add Layer”.

Tagad kā platformas slāni atlasiet “ground” un spēles logā atkārtojiet to visām citām platformām. Vietā, kur mūsu galvenā varoņa sprite objektā ir rakstīts “Kas ir zeme”, atlasiet arī zemes slāni.

Mēs esam uzdevuši atskaņotāja skriptam veikt pārbaudi - ja mazais ekrāna punkts pārklājas ar visu, kas atbilst slānim, raksturs pāriet tikai tad, ja tā ir taisnība.

Spēle beidzas sadursmē un spēles izvēlnē

Tātad, lai to visu apkopotu, pēdējās lietas, kuras mēs vēlamies darīt, ir A: lai sadursme ar šķēršļiem novestu pie spēles beigām, un B: izveidojiet izvēlnes ekrānu “spēle virs” ar pogu Spēlēt vēlreiz.

Tas, ko jūs būtībā vēlaties darīt, ir:

  1. Pievienojiet a Spēlētājs objektu un piešķirt a stingrs ķermenis un a sadursme pēc jūsu izvēles.
  2. Pievienojiet Ienaidnieks objektu un piešķirt a stingrs ķermenis un a sadursme pēc jūsu izvēles. (un pēc izvēles pievienot “Enemy” atzīme uz to)
  3. Izveidojiet jaunu C # skripts un pievienojiet to kā komponentu Spēlētājs (vai izmantojiet jebkuru atskaņotājam pievienoto skriptu, nav nepieciešams izveidot jaunu, ja jums tāds jau ir)
  4. Pievienojiet to savam skriptam:
spēkā neesošs OnCollisionEnter ( Sadursme coll) { Atkļūdošana . Žurnāls (“Sadursme”); // Pārbaudiet, vai tas pat reģistrē sadursmi. Ja tas darbojas, varat noņemt šo rindu ja (coll.gameobject. tagu == 'Ienaidnieks') { // redz, vai objektam, ar kuru spēlētājs sadūrās, ir tags ar nosaukumu 'Enemy