Ako vytvoriť základnú hru pre Android s jednotou

v tomto podobnom výučbe si ukážeme, ako vytvoriť základné Android hra pomocou Unity.



Požiadavky:

  • Jednota
  • Dobrý textový editor ako NotePad ++ (voliteľný, ale odporúčaný)
  • Android SDK
Ak ju ešte nemáte, mali by ste začať stiahnutím a inštaláciou súpravy Unity SDK a tiež súpravy Android SDK. Potrebujeme súpravu Android SDK, aby sme mohli otestovať súbor APK hry v prostredí Androidu.

Spustite Unity a vytvorte nový projekt. Spravte z toho 2D projekt.



Existuje niekoľko panelov, s ktorými sa treba oboznámiť - panel Hierarchia, ktorý bude obsahovať všetky naše prvky scény (scéna = „úroveň“, na ktorej práve pracujete). Potom je tu karta Hra, ktorá sa používa na hranie / testovanie vašej hry v editore, a napravo máte panel Inšpektor, kde môžete upravovať rôzne veci, ako napríklad osvetlenie, fyziku atď.



Prvá vec, ktorú chceme urobiť, je vytvoriť spriteho - bude to naša hlavná postava (ktorú ovládame). Môžete buď nakresliť vlastného spriteho, napríklad nakresliť štvorec očami, alebo spriteho z internetu - len sa uistite, že ide o súbor .PNG (priehľadné pozadie).



Presuňte a umiestnite svojho spriteho do okna hlavnej scény (najväčšieho okna) - zobrazí sa tiež na paneli Hierarchia vľavo.

Teraz teda vytvoríme niekoľko platforiem - môžu to byť jednoduché štvorce, pretože im budeme môcť ľahko zmeniť veľkosť, aby vytvorili steny a ďalšie platformy.

Stačí teda vytvoriť nového štvorcového „sprite“ a myšou ho presúvať do okna Scéna, ako ste to robili so svojou sprite postavou.



Teraz musíme dať pokyn Unity, aby dala fyziku našej hlavnej postave - kliknite na svoju hlavnú postavu sprite (v okne Scéna by mala byť zvýraznená modrou farbou) a potom na paneli Inspector vyhľadajte „GameObjects“.

Kliknite na „Pridať komponent> Fyzika 2D> RigidBody2D“. To automaticky pridá do vášho spriteho fyziku, ktorú by ste si inak museli naskriptovať v inej súprave SDK.

Chceme zabrániť tomu, aby sa hlavná postava pohybovala mimo kontroly - nájdite preto na paneli Inšpektor kartu Obmedzenia (s hlavným obrázkom stále zvýrazneným v okne Scéna) a začiarknite políčko „Freeze Rotation Z“.

Ak stlačíte tlačidlo „Prehrať“, vaša hlavná postava zo škriatkov by mala spadnúť z neba a iba nekonečne padať - o to sa postaráme neskôr, ale všimnite si, ako sme ľahko dokázali aplikovať fyziku. Fyzika, ktorú sme použili, závisí od tvaru, na ktorý sa aplikujú - takže ak by ste napríklad rovnakú fyziku použili aj na guľu, roztočila by sa okolo.

Chceme tiež napraviť našu orientáciu, aby sa zabránilo tomu, že sa postava bude točiť a voľne sa otáčať. Nájdite v inšpektorovi „obmedzenia“ s vybraným hráčom a začiarknutím políčka zastavíte rotáciu Z. Teraz kliknite znova na prehrať a mali by ste zistiť, že váš hráč teraz klesá z neba do svojej nekonečnej záhuby.

Aby sme zabránili tomu, aby naša hlavná postava sprite nekonečne padala, budeme musieť pridať urýchľovač. Toto je v podstate iba plný obrys tvaru, ktorý pridáme k hlavnému znaku sprite. Zvýraznite svoju hlavnú postavu sprite a kliknite na „Pridať komponent> Fyzika 2D> BoxCollider2D.

Teraz urobte to isté s platformou, ktorú ste vytvorili predtým. Vaša hlavná postava sprite by sa teraz mala „zraziť“ s platformou a zostať tam.

Takže teraz sa chceme ubezpečiť, že kamera bude sledovať vašu hlavnú postavu sprite - vo vnútri scény by už mal byť objekt kamery. Toto chcete pretiahnuť na vrchu hlavná postava sprite.

Toto je obzvlášť dôležité, ak vytvárate Bežec založený na 3D , niečo ako Sklon kde potrebujete, aby kamera zostávala neustále za primárnym herným objektom (vaša hlavná postava sprite).

Teraz choďte na panel Hierarchia a v zozname GameObjects chcete potiahnuť kameru zospodu hlavná postava sprite (Player GameObject). Toto urobí z hlavnej postavy sprite ‘ rodič ‘ fotoaparátu. Takže kedykoľvek sa hráč GameObject pohybuje po obrazovke, mala by ho sledovať kamera.

Pre tento tutoriál hry teda práve vytvoríme základnú hru typu nekonečný bežec, niečo ako Beh 3 , kde bude vaša hlavná postava behať po obrazovke a vyhýbať sa prekážkam (alebo „prekonať hru“, ak narazíte na prekážku.) Bude potrebných niekoľko skriptov, z ktorých väčšina bude uvedená v tejto príručke.

Pravým tlačidlom myši kliknite na priečinok „Majetok“ a vytvorte nový priečinok - pomenujte ho Skripty . Teraz kliknite pravým tlačidlom myši na tento nový priečinok a stlačte „Vytvoriť> C # skript“ a pomenujte ho PlayerControls . Tento skript bude definovať správanie našej hlavnej postavy sprite.

Keď dvakrát kliknete na tento nový skript, zobrazí sa by mal otvorte v Visual Studio - alternatívne (a moje osobné preferencie) to môžete upraviť v niečom ako NotePad ++.

Súbor skriptu by už mal mať v sebe kúsok kódu „bojovej dosky“ - v zásade ide o skript, ktorý je potrebné nechať na pokoji alebo ho len prispôsobiť vašim potrebám, a ušetrí nám veľa času. Ideme teda pridať nový objekt.

Nad riadkom neplatí Start ():

verejné Rigidbody2D rb;

Ďalší kúsok kódu, ktorý musíme pridať, pôjde v rámci programu Start () a slúži na nájdenie rigidbody - v zásade dávame jednotke pokyn, aby našla fyziku, ktorú sme pripojili k GameObjects (náš hlavný znak sprite), a Start () sa vykoná, keď sa vytvorí nový objekt alebo skript.

Ďalej vyhľadajte objekt fyziky.

rb = GetComponent< Rigidbody2D > ();

A tento riadok pridáte do Update ()

rb.velocity = Nový Vector2 (3, rb.velocity.y);

Funkcia Update () sa neustále obnovuje, takže akýkoľvek pridaný kód bude prebiehať nepretržite (pokiaľ nebude objekt zničený). To, čo sme urobili, je teda pokyn skriptu, že chceme, aby pevné telo malo nový vektor s rovnakou rýchlosťou na osi Y (rb.velocity.y), ale s rýchlosťou 3 na vodorovnej osi. V budúcnosti môžete tiež použiť ‘ FixedUpdate () “ ktorý je podobný, ale odlišný, pretože tu môžete ovládať množstvo aktualizovaného / obnoveného skriptu.

Uložte skript a vráťte sa späť do Unity. Potom ho zvýraznite kliknutím na svoju hlavnú postavu sprite. Na paneli Inšpektor choďte na Pridať komponent> Skripty a pridajte skript, ktorý sme práve uložili. Teraz, keď kliknete na tlačidlo Prehrať, mala by sa hlavná postava sprite neustále posúvať k okraju platformy.

Vytváranie vstupných ovládacích prvkov prehrávača

Pretože sa jedná o nekonečnú hru v štýle bežca s prekážkami, musíme pre hráča pridať ovládacie prvky, ako napríklad tlačidlo „skok“.

Znovu otvorte skript z minulosti a my pridáme tento ďalší kód:

 ak (Input.GetMouseButtonDown (0)) {rb.velocity = Nový Vector2 (rb.velocity.x, 5); }

Chystáte sa to vložiť do metódy Update () a to, čo v podstate robí, je povedať jednote, že keď hráč klikne na ich tlačidlo myši (čo sa v Androidu preloží ako klepnutie na obrazovku), hlavný znak sprite „skočí“ ' vo vzduchu. Je to preto, že sme na os Y pridali rýchlosť s hodnotou 5 (vyššia hodnota by samozrejme znamenala vyšší skok).

Ak nie ste príliš oboznámení s programovaním, použili sme Ak vyhlásenie, pretože Ak je v podstate druh pokynu „rob alebo nechcem“ - je to doslova povedané AK sa to stane, urobte tento príkaz . Pokiaľ teda hráč nekliká na myš (alebo neklepne na obrazovku Androidu), skript sa samozrejme nespustí.

Pokračujte kliknutím na tlačidlo „Prehrať“ a pred pokračovaním sa uistite, že funguje správne.

Ďalej pridáme naše prekážky (ktoré môžu „zničiť“ hlavného hrdinu), skóre hry a ponuku „koniec hry“.

Ak ste hru zatiaľ otestovali, jediným problémom, ktorý doposiaľ máme, je to, že stlačenie tlačidla „skok“, ktoré sme vytvorili, preskočí postavu bez ohľadu na to, či je uzemnená alebo nie - toto je v podstate Flappy Birds a nie bežca ako chceme. Ale my to napravíme.

V skripte pridajte tento kúsok kódu vyššie metóda Update ():

 verejné Transformácia zemnej kontroly; verejné Transformácia startPosition; verejné   plavák groundCheckRadius; verejné LayerMask whatIsGround; súkromné   bool Na zemi; A potom pridajte tento ďalší riadok do metódy Update nad ak vyhlásenie: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); A potom zmeníte tento nasledujúci riadok tak, aby obsahoval „&& onGround“ ak (Input.GetMouseButtonDown (0) && onGround) {Celý náš skript by mal teda v zásade vyzerať takto: verejné   trieda   PlayerControls : MonoBehaviour { verejné Rigidbody2D rb; verejné Transformácia zemnej kontroly; verejné Transformácia startPosition; verejné   plavák groundCheckRadius; verejné LayerMask whatIsGround; súkromné   bool Na zemi; neplatný   Štart () {rb = GetComponent (); } neplatný   Aktualizácia () {rb.velocity = Nový Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); ak (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = Nový Vector2 (rb.velocity.x, 5); }}}

Aby sme vysvetlili, čo sme urobili, vytvorili sme novú „transformáciu“, čo znamená pozíciu v priestore herného sveta. Nastavili sme jej polomer a dávame jednotke pokyn, aby skontrolovala, či sa polomer prekrýva s našou „zemnou“ vrstvou - a teda ak je náš polomer synchronizovaný so „zemou“, naša postava by mala byť schopná skákať, a ak už sme vo vzduchu z výskoku, nemali by sme byť schopní znovu skočiť. V podstate Na zemi bude pravda ak pomenovaná transformácia pozemná kontrola sa prekrýva so základnou vrstvou. Dúfajme, že to má zmysel.

Takže uložte skript a vráťte sa späť do Unity a všimnete si, že po zvýraznení prehrávača boli do inšpektora pridané ďalšie možnosti. Toto sú verejné premenné a môžeme ich upraviť podľa svojich predstáv.

Teraz kliknite pravým tlačidlom myši na Hierarchiu a vytvorte nový prázdny objekt a presuňte ho tak, aby sa nachádzal pod hlavným znakom sprite v hlavnom okne Scéna - umiestnite tento prázdny objekt tam, kde chceme, aby bola detekovaná podlaha. Premenujte objekt na „Skontrolovať zem“ a potom ho pretiahnite pod herný objekt hráča, ako sme to predtým robili s fotoaparátom (aby sa vytvoril vzťah rodič - dieťa). Prázdny objekt bude teraz, rovnako ako kamera, nasledovať spriteho hlavnej postavy a bude neustále kontrolovať floor distance.cam

Teraz vyberte sprite hlavného znaku a choďte na panel Inšpektor - potiahnite objekt Check Ground do priestoru zvaného „groundCheck“. Pozícia „transformácie“ by sa mala rovnať pozícii tohto nového objektu a kde sa hovorí „Radius“, urobte ju 0,1.

Musíme definovať prízemnú vrstvu. Stačí zvoliť terén a v Inšpektore vyhľadať tlačidlo „Layer: Default“ (je to rozbaľovacie pole) a zvoliť „Add Layer“.

Teraz vyberte ako vrstvu pre našu platformu „zem“ a zopakujte to pre všetky ostatné platformy v okne hry. Ak je na našom objekte sprite objektu hlavnej postavy napísané „Čo je zem“, vyberte tiež prízemnú vrstvu.

To, čo sme urobili, je pokyn prehrávačskému skriptu, aby vykonal kontrolu - ak malý bod na obrazovke sa prekrýva s čímkoľvek, čo sa zhoduje s vrstvou, znak skočí, iba ak je to pravda.

Hra končí v kolízii a v ponuke hier

Aby sme to teda všetko zhrnuli, posledné veci, ktoré chceme urobiť, sú: A: Aby kolízia s prekážkami vyústila do konca hry, a B: Vytvorte obrazovku ponuky „koniec hry“ pomocou tlačidla Prehrať znova.

Čo v podstate chcete urobiť je:

  1. Pridaj Prehrávač objekt a priradiť a pevné telo a a urýchľovač podľa vášho výberu.
  2. Pridajte Nepriateľ objekt a priradiť a pevné telo a a urýchľovač podľa vášho výberu. (a voliteľné, pridať Značka „Enemy“ k tomu)
  3. Vytvorte nový C # skript a pridať ako súčasť do Prehrávač (alebo použite akýkoľvek skript pripojený k prehrávaču, nie je potrebné vytvárať nový, ak už jeden máte)
  4. Pridajte toto do svojho skriptu:
neplatný OnCollisionEnter ( Zrážka kol.) { Debug . Log ('Zrážka'); // Skontrolujte, či vôbec registruje kolíziu. Ak to funguje, môžete tento riadok odstrániť ak (coll.gameobject. značka == 'Nepriateľ') { // zistí, či má objekt, s ktorým sa váš hráč zrazil, štítok s názvom „Enemy“