Egy platformer egység létrehozásáról

Mivel az utolsó cikket a sorozat elég idő telt el (például a vele korábbi cikkek - még több), így itt az ideje, hogy jöjjön vissza, és megmondja, hogyan lehet a legalattomosabb és aljas része minden számítógépes játék - ellenségek. Előre foglalok előre: itt nem tekintünk mesterséges intelligencia létrehozására a karaktered ellenfeleinek. Nézzük meg, hogy az ellenfelek milyen típusúak a legelterjedtebbek a platformereknél, és hogyan lehet azokat megvalósítani az Unity-szel.

Egy platformer egység létrehozásáról

Óvatosan, a vágás alatt még mindig sok gifok!

Felelősségi nyilatkozat: A cikkben szereplő összes kód nem példakép, példája egy ideális kódnak és más, fiktív és nem létező dolgoknak a természetben. A cikkben használt gyakorlatok lehetnek egy adott probléma megoldásának egyik megoldása. És lehet, hogy nem.

Szóval, menjünk. Négy alapvető típusú objektumot azonosítottam, amelyek valamennyire megakadályozzák, hogy a játékod hőse elérje a célt:

1) Statikus (forgó fűrészek, "halálos" blokkok stb.)

Egy platformer egység létrehozásáról

2) Séta platformokon (gombák és teknősök a Super Mario Bros-től)

Egy platformer egység létrehozásáról

3) Repülő (varjak a második szint Ghosts és Goblins)

Egy platformer egység létrehozásáról

4) Lövés (Bauzha ugyanazon Mario várából)

Egy platformer egység létrehozásáról

Még mindig vannak főnökök, de az összes fenti típust kombinálhatják, így nem fogunk élni velük.

1) Statikus akadályok.
Forgó fűrészt készítünk. Az ilyen "ellenség" megvalósításához szó szerint néhány dologról van szó - a fűrész és a szkript, amely forgatni fogja. Amint mondtam, mint kész.

Húzza a sprite-t a helyszínre:

Hozzon létre egy új szkriptet (ez a szokásos módon nagyon egyszerű)

Adja hozzá a következőképpen megjelenő kódot:


Az állami változó sebesség határozza meg a forgás sebességét. Fontos megjegyezni, hogy egy pozitív érték az óramutató járásával ellentétes irányban forgatja a fűrészt, és a negatív érték az óramutató járásával megegyező irányban forog.

Most, hogy kölcsönhatásba lépjen a fűrésszel, adj hozzá valamilyen ütközőt (részletesen leírva a legérdekesebb korábbi részekben), és változtasd meg az objektumcímkét erre a helyzetre.

A címkék jó dolog. A lejátszó, az ellenség ellenséges címke, valamint a falak és a padlószintekhez hozzárendelhetünk egy játékos címkét. Ezt az egyszerű eljárást követve ellenőrizheti, hogy mi, például találkozunk, sokkal könnyebbé válik. És talál egy olyanat (vagy mindazt, ami a színpadon van) egy adott címkével ellátott objektummal. Ez körülbelül így történik:

Egy adott címkével rendelkező összes objektum tömbje a FindGameObjectsWithTag módszerrel érhető el - sehol sem könnyebb.

Térjünk vissza a fűrészekhez, és hozzon létre egy új címkét az ellenség számára a játékban.

A karakter forgatókönyvében a következő ellenőrzést adjuk hozzá


Amint láthatod, mindent elemi: ellenőrizzük az ütközéseket, megnézzük, hogy mi találkoztunk. Ha minden rossz, akkor indítsa újra a szintet. Vagy elveszítjük az életet. Vagy ilyesmi. Pókerjátékosokat játszol, igaz?

Így néz ki a végén:

Így egyszerűen és gyorsan létrehoztuk az első ellenséget - ami persze nem ellenség, hanem meglehetősen akadály. Tovább mennünk.

2) Gyalogos, kúszó és más ellenségek a platformokon mozognak.
Egy felkészületlen olvasó úgy gondolja, hogy az ilyen típusú ellenség nehezebb megvalósítani, mint az első. Gyorsan megnyugtatom - ez nem így van. Mint az előző esetben is, szükségünk van sprite-ra, egy ütköztetőre, egy forgatókönyvre és egy platformra, amelyen mindez mozog. Ehhez a kis listához csak a rigidbody2D kerül hozzáadásra, így az ellenséget a fizika fogja végrehajtani, és beállíthatja annak sebességét.

Sajnos nem tudom felhívni, és kreatív tehetségem elég csak egy ilyen gazember számára:

Egy platformer egység létrehozásáról

A mozgatáshoz használja a következő parancsfájlt

Állítsa be az ellenség mozgásának sebességét és irányát (-1 - balra, 1-jobbra), ami például falakkal ütközhet. Ezután egyszerűen állítsa be a vízszintes sebességet, amely megegyezik a sebesség és az irány értékével.

Vicces tény - ha egy fixedbody2D dummy fixAngle-et helyezsz, akkor az ellenség feltérképez, és ha eltávolítasz, akkor


"De jobbra néz, és balra mozog!" - figyelmes olvasó észreveszi. Javítsuk meg ezt, és a mozgás iránya szerint kibontjuk a sprite-t:


És megtanuljuk, hogyan kell kibontakozni egy fal ütközés során. Ehhez egy pár falat készítünk a fali címkével a szintre és írjuk az ütközés feldolgozását. Itt van:


Most, hogy minden a helyén van, a végeredmény így fog kinézni.

Csak addig kell hozzáadni az Enemy címkét az ellenséghez, hogy tényleg veszélyessé váljon a karakterünk számára.

Összefoglaljuk a részösszeget. Megvizsgáltuk, hogy kétféle "ellenséget" hoznak létre a 2D-platformokon: statikus és szintetizáló. Amint látja, ez nagyon egyszerű, és az alapvető végrehajtás nagyon kevés időt vesz igénybe.

A következő részben elmondom, hogyan lehet létrehozni a másik két fajta ellenséget - repülés és lövöldözés.
Maradjon hangosan - érdekes lesz!

Még néhány hasznos link

Semmilyen esetben sem lehet forgatni vagy mozgatni a gyalogosokat szilárd anyagok nélkül. Ez a keretben lévő fizika újbóli létrehozását és teljes újraértelmezését okozza. Továbbá nem tudod mozgatni a szilárd anyagokat a transzformáción keresztül. Ezt nem észreveszi egyetlen fűrész, de már pár száz fog tetszőleges mobileszközt térdre helyezni. Add hozzá a kinematikus tömeget a fűrészhez, kapcsolja ki a gravitációt és javítsa ki a forgatókönyvet:

Az egyetlen megengedett forgatási változat egy objektum ütközővel


Profiler nélkül a jövőbeli fékek oka egyáltalán nem nyilvánvaló. Tesztelje 240 fában. Balra - a végrehajtás. A közepén - egy szilárd, de forgáson át a transzformáción keresztül látta. Jobbra a megértésem.

Többféle teljesítménykülönbség

Ebben az esetben még gyorsabb alternatíva van - egy statikus fűrészobjektumot, ütközővel, de sprite nélkül, adjunk még egy objektumot a gyerekeknek, de a sprite-t, és pontosan forgassuk. De elfelejtheted, hogy a test nem tud mozogni, mozgó forgó fűrészeket hozzáadni, és ugyanabban a hibában ...

(Elnézést kérek a vangovat készítésért, csak este küldhetek forrásfájlokat)

Ahogy én megértem, mindkét bolygó és tárgy van - szilárd testek, és nem csak rohamosok. A szilárd test nem lehet szilárd testű gyermek, és ugyanakkor normálisan viselkedik - a szülő kiszámíthatatlan módon "dominál", ezért nem örökölte az örökséget.
A MovePosition és a MoveRotation valójában fizikai teleportációt valósít meg egy keretben, amely csak nagyon egyszerű vagy nagyon szintetikus esetekben alkalmazható, például a fűrész forgatása vagy a játékos körüli mozgás. Ie Ha szilárd teste kinematikus, és követi az egyszerűsített szimulációs szabályokat. A sebesség, az erő és a súrlódás összetettebb fogalmak, és a teleportálás során megszakadhatnak. Ha a MovePosition programot a MoveRotation programmal kívánja használni, és azt szeretné, ha erőssége és gyorsasága lenne, saját használatával kell írni, addForce, addVelocity stb. mert a rendelkezésre álló viselkedhet kiszámíthatatlanul görbe.
Ha csak be kell kezdened gyönyörködni a bolygóra, ha repülni akarsz - add hozzá az OnTriggerStay2D központjának irányába - ez lesz a legjobb megoldás. Ha pályára kell menni, és ott maradni, fizikai motor használata közben ... minden sokkal bonyolultabb lesz, akkor meg kell szereznie az iskolai tankönyveket a fizikáról, és ez már egy külön cikk témája.
Azt hiszem, a héten írok egy cikket a fizikai harcomról az Unity-ban ... a játék fizikájában nagyon jól használják, és a motor nyilvánvalóan nem volt kész ilyen konstrukciókra.

Kapcsolódó cikkek