Kuidas luua ühtsusega Androidi põhimängu

selles sarnases õpetuses uurime, kuidas põhiteavet luua Android mängu kasutades Unity.



Nõuded:

  • Ühtsus
  • Hea tekstiredaktor nagu NotePad ++ (valikuline, kuid soovitatav)
  • Androidi SDK
Kui teil seda veel pole, peaksite alustama Unity SDK ja ka Android SDK allalaadimisest ja installimisest. Vajame Android SDK-d, et saaksime mängu APK-d Androidi keskkonnas testida.

Käivitage Unity ja looge uus projekt. Tehke sellest 2D-projekt.



Tutvumiseks on mitu paneeli - hierarhia paneel, mis sisaldab kõiki meie stseenielemente (stseen = ükskõik milline 'tase', millega te praegu töötate). Seejärel on vahekaart Mäng, mida kasutatakse redigeerija sees mängu mängimiseks / testimiseks ja paremal on Inspektori paneel, kus saate redigeerida erinevaid asju, nagu valgustus, füüsika jne.



Esimene asi, mida me tahame teha, on spiraali loomine - see on meie peategelane (keda me kontrollime). Võite joonistada oma sprite'i, näiteks lihtsalt joonistada silmadega ruut või haarata Internetist sprite - veenduge, et see oleks .PNG-fail (läbipaistev taust).



Lohistage oma sprite peastseeniaknale (suurim aken) - see ilmub ka vasakul Hierarhia paneelil.

Nüüd loome mõned platvormid - need võivad olla lihtsad ruudud, sest me saame nende suurust hõlpsasti muuta, et teha seinu ja muid platvorme.

Nii et lihtsalt looge uus ruut 'sprite' ja lohistage see stseeni aknale nagu te tegite oma sprite'i tegelasega.



Nüüd peame andma Unityle ülesandeks anda füüsika meie peategelasele - klõpsake oma peamisel sprite-tegelasel (see peaks stseeni aknas sinisega esile tõstetud), seejärel leidke Inspektori paneelil otsingu „GameObjects”.

Klõpsake nuppu „Lisa komponent> Füüsika 2D> RigidBody2D“. See lisab teie sprite'ile automaatselt füüsika, mille oleksite pidanud muidu ise skriptima mõnes teises SDK-s.

Me tahame takistada peamise sprite'i tegelase kontrolli alt väljumist - nii et leidke Inspektorite paneelilt vahekaart Piirangud (kusjuures peamine sprite on ikka stseenis aknas Stseen esile tõstetud) ja märkige ruut „Freeze Rotation Z”.

Kui vajutate nuppu „Esita“, peaks teie peamine spreitegelane taevast alla kukkuma ja lihtsalt lõputult kukkuma - hoolitseme selle eest hiljem, kuid võtke lihtsalt teadmiseks, kuidas suutsime füüsikat hõlpsalt rakendada. Füüsika, mida rakendasime, sõltub kujust, millele neid rakendatakse - nii et kui rakendate sama füüsikat näiteks kerale, siis see veereks ringi.

Samuti soovime fikseerida oma orientatsiooni, et takistada tegelase ringi liikumist ja vabakäiku. Leidke inspektorist valitud mängijaga piirangud ja märkige ruut rotatsiooni Z külmutamiseks. Nüüd klõpsake uuesti nuppu Esita ja peaksite leidma, et teie mängija langeb nüüd taevast tema lõpmatu hukuni.

Selleks, et peatada meie peamise sprite'i tegelase lõputu kukkumine, peame lisama kokkupõrke. Põhimõtteliselt on see vaid kuju kindel piirjoon, mille lisame sprite'i põhitegelasele. Tõstke esile oma peamine sprite-märk, klõpsake nuppu „Lisa komponent> Füüsika 2D> BoxCollider2D.

Tehke nüüd sama lugu platvormiga, mille olete varem loonud. Teie peamine sprite-tegelane peaks nüüd platvormiga 'kokku põrkama' ja sinna jääma.

Nii et nüüd tahame veenduda, et kaamera järgib teie peamist sprite'i tegelast - stseeni sees peaks juba olema kaameraobjekt. Sa tahad seda lohistada peal spreidi peategelane.

See on eriti oluline, kui loote a 3D-põhine jooksja , midagi sellist Kalle kus vajate kaamerat, et püsida pidevalt peamise mänguobjekti (teie peamine sprite-tegelane) taga.

Nüüd minge paneelile Hierarhia ja GameObjects loendis soovite kaamerat lohistada all peamine sprite-tegelane (Player GameObject). See muudab peamise sprite'i tegelase vanem kaamera. Nii et kui Player GameObject ekraanil ringi liigub, peaks kaamera sellele järgnema.

Nii et selle mänguõpetuse jaoks loome lihtsalt põhilise lõputu jooksja tüüpi mängu, midagi sellist 3. jooks , kus teie peategelane jookseb üle ekraani ja põgeneb takistuste eest (või kui olete takistuse tabanud, on 'mäng läbi'. Selleks kulub paar skripti, millest enamik on antud käesolevas juhendis.

Paremklõpsake kausta „Varad” ja looge uus kaust - andke sellele nimi Skriptid . Nüüd paremklõpsake seda uut kausta ja vajutage 'Loo> C # skript' ja nimetage see PlayerControls . See skript määratleb meie peamise sprite-tegelase käitumise.

Kui topeltklõpsate sellel uuel skriptil, siis see peaks avage Visual Studios - alternatiivina (ja minu isiklik eelistus) saate seda muuta näiteks märkmepadi ++ abil.

Skriptifaili sees peaks olema juba natuke “boiler plate” koodi - põhimõtteliselt on see skript, mis tuleb jätta üksi või lihtsalt oma vajadustele kohandada ja see säästab meid palju aega. Nii et lisame uue objekti.

Rea kohal tühi Start ():

avalik Jäik keha2D rb;

Järgmine koodibitt, mille peame lisama, läheb Starti () sisse ja seda kasutatakse jäiga keha leidmiseks - põhimõtteliselt anname Unityle ülesandeks leida füüsika, mille oleme kinnitanud GameObjectsile (meie peamine sprite märk) ja Start () käivitatakse uue objekti või skripti loomisel.

Järgmisena leidke füüsikaobjekt.

rb = GetComponent< Jäikkere2D > ();

Ja lisate selle rea värskenduse () sisse

rb.nullus = uus Vector2 (3, rb.nõrgus.y);

Mida Update () teeb, värskendatakse pidevalt, nii et kõik sinna lisatud koodid töötavad pidevalt (kui objekti ei hävitata). Nii et oleme teinud skripti juhendi, et me tahame, et jäikkehal oleks uus vektor, mis kasutab Y-teljel sama kiirust (rb.velocity.y), kuid horisontaalteljel kiirusega 3. Tulevikus saate kasutada ka FixedUpdate () ” mis on sarnane, kuid erinev, sest seal saate kontrollida skripti värskendamise / värskendamise hulka.

Salvestage skript ja minge tagasi Unitysse, seejärel klõpsake selle esiletõstmiseks oma peamist sprite'i märki. Valige inspektoripaneelil Lisa komponent> Skriptid ja lisage äsja salvestatud skript. Kui klõpsate nupul Esita, peaks peamine sprite'i tegelane pidevalt platvormi serva poole liikuma.

Mängija sisendi juhtnuppude loomine

Nii et kuna see on lõputu takistustega jooksja stiilis mäng, peame mängija jaoks lisama juhtelemendid, näiteks nupu 'hüpata'.

Avage skript varasemast uuesti ja lisame selle lisakoodi:

 kui (Input.GetMouseButtonDown (0)) {rb.velocity = uus Vector2 (rb.kõrgus.x, 5); }

Panete selle meetodi Update () sisse ja mida see põhimõtteliselt teeb, on öelda Unityle, et kui mängija klõpsab oma hiirenuppu (mis tõlgitakse Androidi ekraanipuudutusena), hüppab peamine sprite'i tegelane ' õhus. Seda seetõttu, et oleme lisanud Y-teljele kiiruse väärtusega 5 (suurem väärtus tähendaks muidugi suuremat hüpet).

Kui te pole kodeerimisega liiga kursis, kasutasime Kui avaldus, sest Kui on põhimõtteliselt 'tee või ära tee' tüüpi juhis - selle sõna otseses mõttes öeldes KUI see juhtub, tehke see käsk . Nii et kui mängija ei klõpsa hiirt (või koputab oma Androidi ekraani), siis ilmselt skripti ei käivitata.

Jätkake ja klõpsake enne jätkamist nuppu „Esita” ja veenduge, et see töötab õigesti.

Järgmisena lisame oma takistused (mis võivad peategelase sprite'i 'hävitada'), mängu skoori ja menüü 'Mäng läbi'.

Kui proovisite mängu seni, on ainus probleem, mis meil siiani on, see, et meie loodud hüpata nuppu vajutades hüppab tegelane, olenemata sellest, kas ta on maandatud või mitte - see on põhimõtteliselt Flappy Birds, mitte selline jooksja nagu me tahame. Kuid me parandame selle.

Skripti lisage see koodibitt ülal meetod Update ():

 avalik Transform groundCheck; avalik Teisenda startPosition; avalik   ujuk groundCheckRadius; avalik LayerMask whatIsGround; privaatne   bool onGround; Ja seejärel lisage see järgmine rida värskendamismeetodile kui lause: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Ja järgmisena muudate selle järgmise rea kaasamiseks „&& onGround” kui (Input.GetMouseButtonDown (0) && onGround) {Nii et kogu meie skript peaks põhimõtteliselt välja nägema selline: avalik   klass   PlayerControls : Monokäitumine { avalik Jäik keha2D rb; avalik Transform groundCheck; avalik Teisenda startPosition; avalik   ujuk groundCheckRadius; avalik LayerMask whatIsGround; privaatne   bool onGround; tühine   Alusta () {rb = GetComponent (); } tühine   Uuenda () {rb.nullus = uus Vector2 (3, rb.nõrgus.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); kui (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = uus Vector2 (rb.kõrgus.x, 5); }}}

Tehtud töö selgitamiseks oleme loonud uue 'teisenduse', mis tähendab positsiooni mängumaailmas. Oleme selle raadiuse määranud ja anname Unityle ülesandeks kontrollida, kas raadius kattub meie 'maapinna' kihiga - ja kui meie raadius on sünkroonitud maapinnaga, peaks meie tegelane olema võimeline hüppama ja kui me oleme juba hüppest õhus, me ei peaks enam saama hüpata. Põhimõtteliselt onGround saab tõsi kui nimeline teisendus groundCheck on maapealse kihiga kattuv. Loodetavasti on see mõistlik.

Nii et salvestage skript ja minge tagasi Unitysse ning märkate, et pärast mängija esiletõstmist on inspektorile lisatud rohkem võimalusi. Need on avalikud muutujad ja saame neid oma maitse järgi kohandada.

Nüüd paremklõpsake Hierarhial ja looge uus tühi objekt ning lohistage see nii, et selle peategelase all olev põhiakna aken spriteeriks - asetage see tühi objekt sinna, kus tahame põranda tuvastamist. Nimetage objekt nimeks „Check Ground” ja lohistage see seejärel mängija mänguobjekti alla nagu varem kaameraga (et luua objektide vahel vanema ja lapse suhe). Nüüd järgib tühi objekt peategelase jälgi, nagu kaamera, ja see kontrollib pidevalt põranda kaugust. Kaamera

Nüüd valige peategelane sprite ja minge paneelile Inspektor - lohistage objekt Check Ground ruumi nimega “groundCheck”. Positsioon „muundamine” peaks olema võrdne selle uue objekti positsiooniga ja kui seal on kirjas „Raadius”, tehke sellest 0,1.

Peame määratlema maapinna kihi. Valige lihtsalt maastik ja leidke inspektorist nupp „Kiht: Vaikimisi” (see on rippmenüü) ja valige „Lisa kiht”.

Valige nüüd meie platvormi kihiks „ground” ja korrake seda mänguaknas kõigi teiste platvormide puhul. Seal, kus meie peategelase sprite objektil on kiri „Mis on maapind”, valige ka aluskiht.

Oleme teinud mängija skriptile korralduse kontrollida - kui ekraanil olev väike punkt kattub millegagi, mis sobib kihile, hüppab märk ainult siis, kui see on tõsi.

Mäng läbi kokkupõrke ja mängumenüü

Nii et selle kõige kokkuvõtmiseks on viimased asjad, mida me teha tahame: A: kui takistustega kokku põrgates on mäng lõppenud, ja B: looge uuesti mängimise nupuga menüü 'Mäng läbi'.

Põhimõtteliselt soovite teha järgmist:

  1. Lisa Mängija objekt ja määrake a jäik keha ja a kokkupõrge omal valikul sellele.
  2. Lisage Vaenlane objekt ja määrake a jäik keha ja a kokkupõrge teie valitud. (ja valikuline, lisage „Vaenlase” silt sellele)
  3. Looge uus C # skript ja lisage see komponendiks Mängija (või kasutage mõnda mängijale lisatud skripti, pole vaja uut luua, kui teil juba on)
  4. Lisage see oma skripti:
tühine OnCollisionEnter ( Kokkupõrge coll) { Silumine . Logi sisse ('Kokkupõrge'); // Kontrollige, kas see isegi registreerib kokkupõrke, kui see töötab, võite selle rea eemaldada kui (koll.gameobjekt. silt == 'Vaenlane') { // näeb, kas objektil, millega teie mängija põrkas, on silt nimega 'Vaenlane