Hogyan lehet létrehozni az alapvető Android játékot az Unity segítségével

ebben a hasonló oktatóanyagban áttekintjük, hogyan lehet létrehozni egy alapot Android játék Unity segítségével.



Követelmények:

  • Egység
  • Egy jó szövegszerkesztő, mint a NotePad ++ (opcionális, de ajánlott)
  • Android SDK
Ha még nincs meg, akkor először a Unity SDK és az Android SDK letöltésével és telepítésével kell kezdenie. Szükségünk van az Android SDK-ra, hogy egy Android környezetben tesztelhessük a játék APK-ját.

Indítsa el a Unity-t, és hozzon létre egy új projektet. Legyen 2D-s projekt.



Számos panelt kell megismerni - a Hierarchia panel, amely az összes jelenetelemünket tartalmazza (jelenet = bármi „szint”, amelyen éppen dolgozik). Ezután ott van a Játék fül, amelyet a játék lejátszásához / teszteléséhez használnak a szerkesztőben, és jobb oldalon van az Ellenőr panel, ahol különböző dolgokat szerkeszthet, például világítást, fizikát stb.



Az első dolog, amit meg akarunk tenni, egy sprite létrehozása - ez lesz a főszereplőnk (akit mi irányítunk). Vagy megrajzolhatja saját sprite-jét, például csak négyzetet rajzolhat a szemével, vagy megragadhat egy sprite-et az internetről - csak ellenőrizze, hogy ez egy .PNG fájl (átlátszó háttér).



Húzza a sprite-et a fő jelenet ablakára (a legnagyobb ablakra) - ez a bal oldali Hierarchia panelen is megjelenik.

Tehát most létrehozunk néhány platformot - ezek egyszerű négyzetek lehetnek, mert könnyen átméretezhetjük őket falak és más platformok készítéséhez.

Tehát csak hozzon létre egy új négyzet alakú „sprite” -et, és húzza át a Scene ablakba, mint a sprite karakterével.



Most utasítanunk kell az Unity-t, hogy adjon fizikát főszereplőnknek - kattintson a fő sprite karakterére (kék színnel kell kiemelni a Jelenet ablakban), majd az Ellenőr panelen keresse meg a „GameObjects” elemet.

Kattintson az „Összetevő hozzáadása> Fizika 2D> RigidBody2D” elemre. Ez automatikusan hozzáadja a fizikát a sprite-jéhez, amelyet egyébként egy másik SDK-ban kellett volna szkriptelnie.

Meg akarjuk akadályozni, hogy a fő sprite karakter irányításon kívül forogjon - tehát keresse meg a Kötelzések fület az Ellenőr panelen (a fő sprite továbbra is kiemelve a Jelenet ablakban), és jelölje be a „Freeze Rotation Z” jelölőnégyzetet.

Ha megnyomja a „Lejátszás” gombot, akkor fő sprite karakterének le kell esnie az égből, és csak végtelenül kell esnie - erről később gondoskodunk, de csak vegye figyelembe, hogyan tudtuk könnyen alkalmazni a fizikát. Az általunk alkalmazott fizika az alakjától függ, amelyre alkalmazzuk - tehát ha például ugyanazt a fizikát alkalmazná egy gömbön, az körbefutna.

Azt is meg akarjuk erősíteni, hogy megakadályozzuk a karakter forogását és szabadonfutását. Keresse meg a „kényszereket” az ellenőrben a kiválasztott lejátszóval, és jelölje be a jelölőnégyzetet a Z forgatás lefagyásához. Most kattintson a Play gombra, és meg kell találnia, hogy a játékos most az égből a végtelen végzetére esik.

Annak érdekében, hogy megakadályozzuk, hogy fő sprite karakterünk csak végtelenül zuhanjon, hozzá kell adnunk egy ütközőt. Ez alapvetően csak egy alakzat szilárd vázlata, amelyet hozzáadunk a fő sprite karakterhez. Jelölje ki fő sprite karakterét, kattintson az „Összetevő hozzáadása> Fizika 2D> BoxCollider2D elemre.

Most ugyanezt tegye a korábban létrehozott platformmal. Fő sprite karakterednek most össze kell ütköznie az emelettel és ott kell maradnia.

Tehát most szeretnénk megbizonyosodni arról, hogy a kamera követni fogja a fő sprite karakterét - a jeleneten belül már kell lennie egy kamerának. Ezt meg akarja húzni a tetején a fő sprite karakter.

Ez különösen fontos, ha a 3D alapú futó , valami hasonló Lejtő ahol szükség van a kamerára, hogy folyamatosan az elsődleges játékobjektum mögött maradjon (fő sprite karaktered).

Most lépjen a Hierarchia panelre, és a GameObjects listában húzza a kamerát alul a fő sprite karakter (Player GameObject). Ezáltal a fő sprite karakter a szülő' a kamera. Tehát, amikor a Player GameObject mozog a képernyőn, a kamerának követnie kell.

Tehát ehhez a játék bemutatóhoz csak egy végtelen futó típusú játékot fogunk létrehozni, valami hasonlót 3. futás , ahol főszereplője végigfut a képernyőn, és elkerüli az akadályokat (vagy ha „akadályba ütközik”, „játék vége”. Ez néhány szkriptet fog igénybe venni, amelyek nagy részét ebben az útmutatóban találja meg.

Kattintson a jobb gombbal az „Eszközök” mappára, és hozzon létre egy új mappát - nevezze el Szkriptek . Most kattintson jobb gombbal erre az új mappára, és nyomja meg a „Létrehozás> C # szkript” elemet, és nevezze el PlayerControls . Ez a szkript fogja meghatározni a fő sprite karakterünk viselkedését.

Amikor duplán kattint erre az új szkriptre, akkor arra kellene nyissa meg a Visual Studio-ban - alternatív megoldásként (és személyes preferenciáim szerint) szerkesztheti olyasmiben, mint a NotePad ++.

A szkriptfájlnak már tartalmaznia kell egy kis „kazántányér” kódot - alapvetően ez a szkript, amelyet egyedül kell hagyni, vagy csak az Ön igényeihez kell igazítani, és ez rengeteg időt takarít meg nekünk. Tehát új objektumot adunk hozzá.

A Start () sor felett érvénytelen:

nyilvános Rigidbody2D rb;

A következő kód, amelyet hozzá kell adnunk, a Start () elemen belül található, és a merev test megtalálásához használatos - alapvetően arra utasítjuk az Unity-t, hogy keresse meg a GameObjects-hez (a fő sprite karakterünkhöz) csatolt fizikát és a Start-ot A () egy új objektum vagy parancsfájl létrehozásakor fog végrehajtódni.

Tehát ezután keresse meg a fizikai objektumot.

rb = GetComponent< Merev test2D > ();

És hozzáadja ezt a sort az Update ()

rb.telenség = új Vector2 (3, rb.velocity.y);

Az Update () folyamatosan frissül, így minden hozzáadott kód folyamatosan fut (hacsak az objektum nem pusztul el). Tehát azt tettük, hogy utasítottuk a forgatókönyvet, hogy azt akarjuk, hogy a merev test legyen egy új vektor, amely ugyanazt a sebességet használja az Y tengelyen (rb.velocity.y), de a vízszintes tengelyen 3 sebességgel. A jövőben használhatja a FixedUpdate () ” ami hasonló, de eltérő, mert ott szabályozhatja a szkript frissítési / frissítési mennyiségét.

Mentse a szkriptet, és menjen vissza a Unity-be, majd kattintson a fő sprite karakterre a kiemeléséhez. Az Ellenőr panelen lépjen az Összetevő hozzáadása> Szkriptek elemhez, és adja hozzá az imént mentett parancsfájlt. Most, amikor a Lejátszás gombra kattint, a fő sprite karakternek folyamatosan a platform széléhez kell haladnia.

A lejátszó bemeneti vezérlőinek létrehozása

Tehát mivel ez egy végtelen, akadályokkal küzdő futóstílusú játék, hozzá kell adnunk a játékos kezelőszerveit, például egy „ugrás” gombot.

Nyissa meg újra a szkriptet az előzőekből, és hozzáadjuk a következő kódot:

 ha (Input.GetMouseButtonDown (0)) {rb.velocity = új Vector2 (rb.velocity.x, 5); }

Ezt az Update () metódusba fogja tenni, és alapvetően azt mondja az Unity-nek, hogy amikor a játékos rákattint az egérgombbal (amelyet az Android képernyőn érintésként fog lefordítani), a fő sprite karakter „ugrik” ' levegőben. Ennek oka az, hogy hozzáadtunk egy sebességet az Y tengelyhez 5-ös értékkel (a magasabb érték természetesen magasabb ugrást jelentene).

Ha még nem ismeri a kódolást, akkor egy Ha állítás, mert Ha alapvetően „csinál vagy nem” típusú utasítás - szó szerint azt mondja HA ez megtörténik, hajtsa végre ezt a parancsot . Tehát, ha a játékos nem kattint az egérrel (vagy nem koppint az Android képernyőjére), akkor nyilvánvalóan a parancsfájl nem fog futni.

Kattintson a „Play” gombra, és a folytatás előtt ellenőrizze, hogy megfelelően működik-e.

Ezután hozzáadjuk az akadályainkat (amelyek 'elpusztíthatják' a főszereplő sprite-jét), a játék pontszámát és a 'game over' menüt.

Ha eddig tesztelted a játékot, az egyetlen problémánk eddig az, hogy az általunk létrehozott „ugrás” gomb megnyomásával a karakter megugrik, függetlenül attól, hogy földeltek-e vagy sem - ez alapvetően a Flappy Birds, és nem egy olyan futó, mint mi akarunk. De ezt meg fogjuk javítani.

A szkriptben adja hozzá ezt a bit kódot felett az Update () módszer:

 nyilvános Transform groundCheck; nyilvános Transform startPosition; nyilvános   úszó groundCheckRadius; nyilvános LayerMask whatIsGround; magán   bool a földön; Ezután adja hozzá ezt a következő sort a ha utasítás: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); És ezután megváltoztatja ezt a következő sort, hogy tartalmazza az „&& onGround” szót ha (Input.GetMouseButtonDown (0) && onGround) {Tehát a teljes szkriptünknek alapvetően így kell kinéznie: nyilvános   osztály   PlayerControls : MonoBehaviour { nyilvános Rigidbody2D rb; nyilvános Transform groundCheck; nyilvános Transform startPosition; nyilvános   úszó groundCheckRadius; nyilvános LayerMask whatIsGround; magán   bool a földön; üres   Rajt () {rb = GetComponent (); } üres   Frissítés () {rb.velocity = új Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); ha (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = új Vector2 (rb.velocity.x, 5); }}}

Hogy elmagyarázzuk, mit tettünk, létrehoztunk egy új „transzformációt”, ami a játék világában betöltött helyet jelent. Beállítottuk a sugarát, és utasítjuk az Unity-t, hogy ellenőrizze, a sugár átfedik-e a „föld” rétegünket - és ha a sugárunk szinkronban van a „talajjal”, akkor karakterünknek képesnek kell lennie arra, hogy ugrani tudjon, és ha már a levegőben vagyunk egy ugrástól, nem kellene képesek lennünk újra ugrani. Alapvetően, a földön igaz lesz ha a nevezett átalakítás groundCheck átfedésben van a talajréteggel. Remélhetőleg ennek van értelme.

Tehát mentse el a szkriptet, és menjen vissza a Unity-be, és észreveszi, hogy a lejátszó kijelölése után további lehetőségek kerültek az Ellenőrbe. Ezek nyilvános változók, és ezeket kedvünkre állíthatjuk.

Most kattintson a jobb gombbal a hierarchiára, és hozzon létre egy új üres objektumot, és húzza azt úgy, hogy a fő karakter alatt a Fő jelenet ablakban kiforduljon - helyezze ezt az üres objektumot oda, ahová a padlót szeretnénk észlelni. Nevezze át az objektumot „Check Ground” -ra, majd húzza a játékos játékobjektuma alá, mint ahogy azt korábban a kamerával tettük (hogy szülő-gyermek kapcsolat jöjjön létre az objektumok között). Most az üres tárgy követi a főszereplő sprite-jét, akárcsak a kamera, és folyamatosan ellenőrzi a padló távolságát.cam

Most válassza ki a fő karakter sprite-t, és lépjen az Ellenőr panelre - húzza a Check Ground objektumot a „groundCheck” nevű térbe. A „transzformáció” pozíciónak meg kell egyeznie ennek az új objektumnak a helyzetével, és ahol azt mondja, hogy „Sugár”, állítsa 0,1-re.

Meg kell határoznunk a talajréteget. Csak válassza ki a talaj terepét, és az Ellenőrben keresse meg a „Réteg: Alapértelmezett” gombot (ez egy legördülő menü), és válassza a „Réteg hozzáadása” lehetőséget.

Most válassza ki a „ground” lehetőséget platformunk rétegeként, és ismételje meg ezt a játékablak bármely más platformján. Ahol a főszereplő sprite objektumunkon a „Mi a föld” felirat szerepel, ott válasszuk ki a talajréteget is.

Amit megtettünk, utasítottuk a lejátszó szkriptjét egy ellenőrzés elvégzésére - ha a képernyőn látható kis pont átfedésben van a fóliával megegyezővel, a karakter csak akkor ugrik meg, ha ez igaz.

A játék vége az ütközés és a játék menüben

Tehát az egészet összefoglalva, az utolsó dolgok, amelyeket meg akarunk tenni: A: Az akadályokkal való ütközés eredményeként véget ér a játék, és B: Hozzon létre egy „játék felett” menü képernyőt egy újra játék gombbal.

Amit alapvetően meg akarsz tenni:

  1. Adja hozzá a Játékos objektumot és hozzárendelni a merev test és a ütköző választása szerint.
  2. Adjon hozzá egy Ellenség objektumot és hozzárendelni a merev test és a ütköző választása szerint. (és választható, add „Ellenség” címke hozzá)
  3. Újat csinálni C # szkript és adjuk hozzá komponensként a Játékos (vagy használjon bármilyen lejátszóhoz csatolt szkriptet, nem kell újat létrehoznia, ha már van ilyen)
  4. Adja hozzá ezt a szkriptjéhez:
üres OnCollisionEnter ( Ütközés coll) { Hibakeresés . Napló ('Ütközés'); // Ellenőrizze, hogy regisztrál-e egy ütközést, ha működik, akkor eltávolíthatja ezt a sort ha (coll.gameobject. címke == 'Ellenség') { // megnézi, hogy a lejátszódnak ütköző objektum rendelkezik-e „Ellenség” nevű címkével