Kaip sukurti pagrindinį „Android“ žaidimą su „Unity“

šioje panašioje pamokoje aptarsime, kaip sukurti pagrindinį „Android“ žaidimas naudojant „Unity“.



Reikalavimai:

  • Vienybė
  • Geras teksto redaktorius, pvz., „NotePad ++“ (pasirenkamas, bet rekomenduojamas)
  • „Android“ SDK
Jei dar neturite, pirmiausia turėtumėte atsisiųsti ir įdiegti „Unity SDK“, taip pat „Android SDK“. Mums reikia „Android SDK“, kad galėtume išbandyti žaidimo APK „Android“ aplinkoje.

Paleiskite „Unity“ ir sukurkite naują projektą. Padarykite tai 2D projektu.



Yra keletas panelių, su kuriomis susipažinsite - Hierarchijos skydelis, kuriame bus visi mūsų scenos elementai (scena = koks „lygis“, kurį šiuo metu dirbate). Tada yra skirtukas Žaidimas, kuris naudojamas žaidimui žaisti / išbandyti redaktoriaus viduje, o dešinėje - skydelis Inspektorius, kuriame redaguosite įvairius dalykus, pvz., Apšvietimą, fiziką ir kt.



Pirmas dalykas, kurį norime padaryti, yra sukurti „sprite“ - tai bus pagrindinis mūsų veikėjas (kurį mes valdome). Galite piešti savo „sprite“, pavyzdžiui, tiesiog nupiešti kvadratą akimis, arba galite patraukti „sprite“ iš interneto - tiesiog įsitikinkite, kad tai .PNG failas (skaidrus fonas).



Nuvilkite „sprite“ ant pagrindinio scenos lango (didžiausio lango) - jis taip pat pasirodys kairėje pusėje esančiame „Hierarchijos“ skydelyje.

Taigi dabar sukursime kelias platformas - tai gali būti paprasti kvadratai, nes galėsime lengvai juos pakeisti, kad būtų galima padaryti sienas ir kitas platformas.

Taigi tiesiog sukurkite naują kvadratinį „sprite“ ir vilkite jį „Scene“ lange, kaip jūs darėte su savo „sprite“ personažu.



Dabar turime nurodyti „Unity“ duoti fiziką mūsų pagrindiniam veikėjui - spustelėkite savo pagrindinį „sprite“ veikėją (jis turėtų būti pažymėtas mėlyna spalva „Scene“ lange), tada „Inspector“ skydelyje ieškokite „GameObjects“.

Spustelėkite „Pridėti komponentą> Fizika 2D> RigidBody2D“. Tai automatiškai pridės fiziką prie jūsų „sprite“, kurią priešingu atveju būtumėte turėję patys scenarijai kitame SDK.

Mes norime užkirsti kelią pagrindinio sprite veikėjo sukimuisi nevaldomai - todėl Inspektorių skydelyje raskite skirtuką Apribojimai (langelyje Scene vis dar paryškinus pagrindinį sprite) ir pažymėkite laukelį „Freeze Rotation Z“.

Jei paspausite mygtuką „Groti“, jūsų pagrindinis „sprite“ veikėjas turėtų kristi iš dangaus ir tiesiog be galo kristi - mes tuo pasirūpinsime vėliau, bet tiesiog atkreipkite dėmesį į tai, kaip mums lengvai pavyko pritaikyti fiziką. Fizika, kurią pritaikėme, priklauso nuo formos, į kurią jie bus pritaikyti - taigi, jei, pavyzdžiui, tą pačią fiziką pritaikytumėte sferoje, ji suktųsi.

Mes taip pat norime nustatyti savo orientaciją, kad veikėjas nesisuktų ir nesivyniotų. Inspektoriuje raskite „suvaržymų“ su pasirinktu grotuvu ir pažymėkite langelį, kad sustabdytumėte sukimąsi Z. Dabar spustelėkite „Play“ dar kartą ir turėtumėte rasti, kad jūsų grotuvas dabar nukrenta iš dangaus į jo begalinį pražūtį.

Kad mūsų pagrindinis sprite'o veikėjas nesibaigtų be galo krisdamas, turėsime pridėti susidūrėją. Iš esmės tai tik tvirtas formos kontūras, kurį pridėsime prie pagrindinio sprite personažo. Pažymėkite savo pagrindinį sprite simbolį, spustelėkite „Pridėti komponentą>„ Physics 2D “>„ BoxCollider2D “.

Dabar atlikite tą patį tikslą naudodami anksčiau sukurtą platformą. Jūsų pagrindinis sprite personažas dabar turėtų „susidurti“ su platforma ir likti ten.

Taigi dabar norime įsitikinti, kad kamera seks jūsų pagrindinį veikėją - scenos viduje jau turėtų būti fotoaparato objektas. Jūs norite tai vilkti ant viršaus pagrindinis sprite veikėjas.

Tai ypač svarbu, jei kuriate 3D bėgikas , kažkas kaip Nuolydis kur jums reikia fotoaparato, kad nuolat liktumėte už pagrindinio žaidimo objekto (jūsų pagrindinis sprite personažas).

Dabar eikite į „Hierarchy“ skydelį ir „GameObjects“ sąraše norite vilkti kamerą po pagrindinis sprite veikėjas (Player GameObject). Tai padarys pagrindinį sprite veikėją tėvas “ fotoaparato. Taigi, kai „Player GameObject“ juda aplink ekraną, fotoaparatas turėtų sekti paskui.

Taigi šiai žaidimo pamokai mes tiesiog sukursime pagrindinį begalinį bėgikų tipo žaidimą 3 važiavimas , kur jūsų pagrindinis veikėjas bėgs per ekraną ir išvengs kliūčių (arba „baigsite žaidimą“, jei pataikysite į kliūtį “. Tam reikės kelių scenarijų, kurių dauguma bus pateikti šiame vadove.

Dešiniuoju pelės mygtuku spustelėkite aplanką „Turtas“ ir sukurkite naują aplanką - pavadinkite jį Scenarijai . Dabar dešiniuoju pelės mygtuku spustelėkite šį naują aplanką ir paspauskite „Kurti> C # scenarijus“ ir pavadinkite jį „PlayerControls“ . Šis scenarijus apibūdins mūsų pagrindinio sprite veikėjo elgesį.

Kai dukart spustelėsite šį naują scenarijų, jis turėtų atidarykite „Visual Studio“ - taip pat (ir mano asmeninius pageidavimus) galite redaguoti naudodami „NotePad ++“.

Scenarijaus faile jau turėtų būti šiek tiek „katilo plokštės“ kodo - iš esmės tai yra scenarijus, kurį reikia palikti vieną arba tiesiog pritaikyti pagal jūsų poreikius, ir tai sutaupys mums daug laiko. Taigi mes pridėsime naują objektą.

Virš eilutės negaliojanti pradžia ():

visuomenės „Rigidbody2D rb“;

Kitas kodas, kurį turime pridėti, bus „Start“ (), ir naudojamas norint rasti standžią kūną - iš esmės mes nurodome „Unity“ surasti fiziką, kurią pridėjome prie „GameObjects“ (mūsų pagrindinis sprite simbolis), ir „Start“ () bus vykdoma sukūrus naują objektą ar scenarijų.

Taigi raskite fizikos objektą.

rb = „GetComponent“< Standus kūnas2D > ();

Ir jūs pridėsite šią eilutę „Update“ () viduje

rb.žvilgsnis = naujas „Vector2“ (3, rb.žvilgsnis.y);

Atnaujinimas () yra nuolat atnaujinamas, todėl bet koks jame pridėtas kodas veiks nuolat (nebent objektas bus sunaikintas). Taigi, ką mes padarėme, nurodėme scenarijui, kad mes norime, kad standusis kūnas turėtų naują vektorių, naudodamas tą patį greitį Y ašyje (rb.velocity.y), bet horizontaliu ašimi 3 greičiu. Ateityje taip pat galite naudoti „FixedUpdate ()“ kuris yra panašus, bet kitoks, nes ten galite valdyti scenarijaus atnaujinimo / atnaujinimo kiekį.

Išsaugokite scenarijų ir grįžkite į „Unity“, tada spustelėkite pagrindinį „sprite“ simbolį, kad jį paryškintumėte. Inspektoriaus skydelyje eikite į Pridėti komponentą> Scenarijai ir pridėkite ką tik išsaugotą scenarijų. Dabar spustelėjus mygtuką Leisti, pagrindinis „sprite“ veikėjas turėtų nuolat judėti link platformos krašto.

Grotuvo įvesties valdiklių kūrimas

Taigi, nes tai yra begalinis bėgikų stiliaus žaidimas su kliūtimis, todėl žaidėjui turime pridėti tokius valdiklius kaip „peršokimo“ mygtukas.

Dar kartą atidarykite scenarijų iš anksčiau ir mes pridėsime šį papildomą kodą:

 jei (Įvestis.GetMouseButtonDown (0)) {rb.velocity = naujas „Vector2“ (rb.žvilgsnis.x, 5); }

Jūs ketinate tai įdėti į „Update“ () metodą ir iš esmės tai pasakykite „Unity“, kad kai žaidėjas spustelės pelės mygtuką (kuris bus išverstas kaip ekrano bakstelėjimas „Android“), pagrindinis „sprite“ veikėjas „šoks ' ore. Taip yra todėl, kad pridėjome Y ašies greitį, kurio vertė 5 (žinoma, didesnė reikšmė reikštų didesnį šuolį).

Jei nesate per daug susipažinęs su kodavimu, mes naudojome Jei pareiškimas, nes Jei iš esmės yra „daryti ar ne“ instrukcija - jos pažodžiui sakoma JEI taip atsitiks, atlikite šią komandą . Taigi, jei grotuvas nespusteli pelės (arba neliečia savo „Android“ ekrano), akivaizdu, kad scenarijus nebus paleistas.

Prieš tęsdami, spustelėkite mygtuką „Atkurti“ ir įsitikinkite, kad jis veikia tinkamai.

Toliau pridėsime savo kliūtis (kurios gali „sunaikinti“ pagrindinio veikėjo sprite), žaidimo rezultatą ir meniu „žaidimas baigtas“.

Jei iki šiol išbandėte žaidimą, vienintelė problema, kurią turime iki šiol, yra tai, kad paspaudus mūsų sukurtą mygtuką „Peršokti“, personažas peršoks, nesvarbu, ar jis yra pagrįstas, ar ne - tai iš esmės yra „Flappy Birds“, o ne toks bėgikas, kaip Mes norime. Bet mes tai ištaisysime.

Į scenarijų pridėkite šį kodo bitą aukščiau „Update ()“ metodas:

 visuomenės Transform groundCheck; visuomenės Transform startPosition; visuomenės   plūdė groundCheckRadius; visuomenės „LayerMask whatIsGround“; privatus   bool ant žemės; Tada pridėkite šią kitą eilutę prie naujinimo metodo virš jei sakinys: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Tada pakeisite šią eilutę įtraukdami „&& onGround“ jei (Input.GetMouseButtonDown (0) && onGround) {Taigi visas mūsų scenarijus iš esmės turėtų atrodyti taip: visuomenės   klasė   „PlayerControls“ : Vienspalvis elgesys { visuomenės „Rigidbody2D rb“; visuomenės Transform groundCheck; visuomenės Transform startPosition; visuomenės   plūdė groundCheckRadius; visuomenės „LayerMask whatIsGround“; privatus   bool ant žemės; tuštuma   Pradėti () {rb = GetComponent (); } tuštuma   Atnaujinti () {rb.žvilgsnis = naujas „Vector2“ (3, rb.žvilgsnis.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); jei (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = naujas „Vector2“ (rb.žvilgsnis.x, 5); }}}

Norėdami paaiškinti, ką padarėme, sukūrėme naują „transformaciją“, kuri reiškia poziciją žaidimų pasaulio erdvėje. Mes nustatėme jo spindulį ir nurodome „Unity“ patikrinti, ar spindulys sutampa su mūsų „žemės“ sluoksniu - taigi, jei mūsų spindulys sinchronizuojamas su „žeme“, mūsų personažas turėtų sugebėti šokinėti, o jei mes Mes jau ore nuo šuolio, mes negalėtume vėl šokti. Iš esmės, ant žemės bus tiesa jei pavadintą pertvarką groundCheck yra persidengiantis su žemės sluoksniu. Tikimės, kad tai yra prasminga.

Taigi išsaugokite scenarijų ir grįžkite į „Unity“, ir, pastebėję grotuvą, pastebėsite, kad inspektoriui buvo pridėta daugiau parinkčių. Tai yra viešieji kintamieji, kuriuos galime pritaikyti savo nuožiūra.

Dabar dešiniuoju pelės mygtuku spustelėkite hierarchiją ir sukurkite naują tuščią objektą ir vilkite jį taip, kad jis po pagrindiniu personažu sprogtų pagrindiniame „Scena“ lange - pastatykite šį tuščią objektą ten, kur norime aptikti grindis. Pervardykite objektą į „Check Ground“, tada vilkite jį po žaidėjo žaidimo objektu, kaip tai darėme anksčiau su kamera (norėdami sukurti tėvų ir vaikų santykį tarp objektų). Dabar tuščias objektas stebės pagrindinį veikėją, kaip ir fotoaparatas, ir jis nuolat tikrins grindų atstumą. Kamera

Dabar pasirinkite pagrindinį personažą „Sprite“ ir eikite į „Inspector“ skydelį - vilkite „Check Ground“ objektą į vietą, pavadintą „groundCheck“. 'Transformuoti' padėtis turėtų būti lygi šio naujo objekto padėčiai, o ten, kur sakoma 'Radius', padaryti ją 0,1.

Turime apibrėžti žemės sluoksnį. Tiesiog pasirinkite žemės reljefą ir Inspektoriuje raskite mygtuką „Sluoksnis: numatytasis“ (tai yra išskleidžiamasis laukelis) ir pasirinkite „Pridėti sluoksnį“.

Dabar pasirinkite „ground“ kaip mūsų platformos sluoksnį ir pakartokite tai bet kuriai kitai platformai žaidimo lange. Ten, kur parašyta „Kas yra žemė“ mūsų pagrindiniame sprite objekte, taip pat pasirinkite pagrindo sluoksnį.

Tai, ką padarėme, liepėme grotuvo scenarijui atlikti patikrinimą - jei mažas taškas ekrane sutampa su viskuo, kas atitinka sluoksnį, simbolis šokinėja tik tuo atveju, jei tai tiesa.

Žaidimas baigtas susidūrimo ir žaidimo meniu

Taigi, norėdami viską užbaigti, paskutiniai dalykai, kuriuos norime padaryti, yra A: kad susidūrimas su kliūtimis baigtųsi žaidimu, ir B: sukurkite meniu „Žaidimas baigtas“ su mygtuku „Žaisti dar kartą“.

Ką iš esmės norite padaryti, yra:

  1. Pridėti Žaidėjas objektas ir priskirti a tvirtas kūnas ir a susidūrėjas savo pasirinkimu.
  2. Pridėti Priešas objektas ir priskirti a tvirtas kūnas ir a susidūrėjas savo nuožiūra. (ir neprivaloma, pridėti Žyma „Priešas“ prie jo)
  3. Sukurkite naują C # scenarijus ir pridėkite jį kaip komponentą prie Žaidėjas (arba naudokite bet kurį prie grotuvo pridėtą scenarijų, nereikia kurti naujo, jei jį jau turite)
  4. Pridėkite tai prie scenarijaus:
tuštuma „OnCollisionEnter“ ( Susidūrimas coll) { Derinti . Žurnalas („Susidūrimas“); // Patikrinkite, ar jis net užregistruoja susidūrimą, jei jis veikia, galite pašalinti šią eilutę jei (coll.gameobject. žyma == 'Priešas') { // mato, ar objekte, su kuriuo susidūrė jūsų grotuvas, yra žyma „Priešas“