Lekérésészlelés megvalósítása csempetérképekkel
Ellenőrzési környezet
- Windows
-
- Windows 11 esetén
- Unity-szerkesztő
-
- 2021.3.3f1
- Bemeneti rendszercsomag
-
- 1.3.0
A tipp előfeltételei
A következő beállításokat előre elvégeztük a tipp leírásának előfeltételeként.
Mik ennek a tippnek az előfeltételei?
- Felülről lefelé irányuló 2D térkép létrehozása szabványos Unity-csempetérképek használatával
- Ütközéskezelés szabványos fizikával (2D)
Térképanyagok kölcsönzése – ismertető
A következő webhelyekről kölcsönzött anyagokat dolgozzuk fel.
Gyalogos karakterek megvalósítása
Először implementáljon egy térképet és egy karaktert, amely találatészlelést hajt végre. Ez a karakter a billentyűzet kurzorbillentyűivel mozgatható. Ha azonban megfelelő sétát hajt végre, akkor hosszú lesz, és messze van a könyvtippek lényegétől, ezért ezúttal csak egy egyszerű képet mozgatok.
Ha gyalogos animációkat szeretne megvalósítani, olvassa el a következő tippeket:
A projekt létrehozása után adjon hozzá egy sprite-képet a projektbe áthelyezni kívánt objektumról.
Válassza ki a képet, és állítsa a Képpont/egység beállítást 32-re a vizsgálóban. Ez azért van, mert a mapchip egy négyzetének mérete 32 pixel, tehát belefér. A konfigurálás után kattintson az alábbi "Alkalmaz" gombra.
Helyezze a sprite-ot a nézetbe.
Hozzon létre egy szkriptet a sprite áthelyezéséhez. Ez hasonló az alábbi tippekhez:
Hagyja meg a szkript nevét Player
.
A következő kód:
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
// 一定時間ごとに呼ばれます
void FixedUpdate()
{
// キーボードの情報を取得
var keyboard = Keyboard.current;
// スプライトの移動処理
if (keyboard.leftArrowKey.isPressed)
{
transform.Translate(-0.1f, 0, 0, Space.World);
}
if (keyboard.rightArrowKey.isPressed)
{
transform.Translate(0.1f, 0, 0, Space.World);
}
if (keyboard.upArrowKey.isPressed)
{
transform.Translate(0, 0.1f, 0, Space.World);
}
if (keyboard.downArrowKey.isPressed)
{
transform.Translate(0, -0.1f, 0, Space.World);
}
}
}
Csatlakoztassa az áthelyezni kívánt sprite-hoz.
Futtassa a játékot, és ellenőrizze, hogy szeretné-e mozgatni a billentyűzettel.
Térképtippek előkészítése
Először is készítünk egy térképchipet és készítünk egy térképet. Ez az eljárás hasonló az alábbi tippekhez: A 2D Tilemap Extras segítségével készült térképtippek szintén képesek ütközésészlelésre, de ebben a cikkben nem használjuk őket, mert az eljárás hosszú lesz.
Készítse elő a térképtipp eredeti képét, és adja hozzá a projekthez. A művelet könnyebb megértése érdekében kérjük, készítsen elő egy "sétálható helyet" és egy "nem járható helyet" a térképchip anyagához.
Állítsa be a MapChips számára az Inspector alkalmazásban, és kattintson az Apply gombra. A konfigurálás után nyissa meg a Sprite szerkesztőt.
Ez egy 32 pixeles térképtipp, ezért felosztom 32-re.
Válassza a Csempepaletta lapot. Ha nem, jelenítse meg a menü "Window > 2D -> Tile Palette" elemével. Hozzon létre egy új palettát. A név önkényes, de most "MapChipPalette" -nek nevezzük.
Hozzon létre egy MapChipPalette mappát a Jelenetek mappában, és adja meg.
Adjon hozzá egy maptipet a palettára húzással. Mentse a korábban létrehozott MapChipPalette mappába.
Térkép létrehozása
Ezúttal a térképtalálati ítéletet a "Tilemap" egységeiben hajtják végre. Ezért két Tilemap-et hozunk létre: "Tilemap hit észlelés nélkül" és "Tilemap találatészleléssel".
Először hozzon létre két csempetérképet a hierarchiában. Kettőt hozhat létre a rácsban. A nevek "TilemapObeject" és "TilemapGround" az egyértelműség érdekében.
Először hozzon létre egy "TilemapGround" -ot. Mivel ez egy mozgatható tartomány, egyszerűen lefektetheti a földet. Ha a földön van, megváltoztathatja a mintát.
Egyébként, ha a karakter rejtett, válassza ki a karakterobjektumot, és állítsa az Sprite Renderer
ellenőr rétegsorrendjét 2-re.
A rétegek sorrendje alapértelmezés szerint 0, a csempetérkép pedig 0, így ha ezen érték fölé növeli, akkor az előtérben jelenik meg.
Ezután válassza a TilemapObject lehetőséget, és helyezze el a mozdulatlanul létrehozni kívánt térképtippet. Először állítsa be a rétegek sorrendjét 1-re. Ez azért van, hogy megjelenjen a föld előtt.
Így néz ki, ha elrejti a földet.
Természetesen ezen a ponton nincsenek ütközésérzékeléssel kapcsolatos beállítások, így normálisan lovagolhat magas terepen. Ezt követően beállítjuk az ütközésérzékelést.
Ütközésérzékelési beállítások
Először állítsuk be a karaktert. Ez a beállítás majdnem megegyezik az alábbi tippekkel, ezért kihagyom a részleteket, és röviden elmagyarázom az eljárást.
Válasszon ki egy karakterobjektumot a hierarchiából, és válassza a Physics 2D -> Circle Collider 2D lehetőséget az Add Component (Összetevő hozzáadása) menüből. Ha az objektum alakja téglalap alakú, a "Box Collider 2D" rendben van.
Hasonlóképpen adja hozzá a "Fizika 2D -> merevtest 2D" -t.
Állítsa a gravitációs skálát 0-ra az automatikus leesés elkerülése Rigidbody 2D
érdekében.
Ellenőrizze a Z-t a Kényszerek alatt, hogy megakadályozza a sprite forgását ütközéskor.
Ezután válassza ki a "TilemapObject" elemet, amelyet el szeretne érni, és válassza a "Tilemap -> Tilemap Collider 2D" lehetőséget az "Összetevő hozzáadása" részből.
Ennyi az egész. Még programozásra sincs szükséged. Futtassa a játékot, és próbálja meg eltalálni a falnak váló tárgyat. Azt hiszem, meggyőződhet arról, hogy megfelelően leáll.
Amikor azonban ténylegesen eltalálja, úgy gondolom, hogy aggodalomra okot adó pontok lesznek a viselkedésben. Íme néhány megoldás:
A találatészlelés kényelmetlen viselkedése a térképpel és a megoldásokkal
Amikor falba ütközik, találhat néhány dolgot, ami zavarja.
Ha a falnak mozogsz, akkor a közepén fogsz elkapni
Box Collider 2D
Azt hiszem, ez megtörténik, ha egy tárgyat használ.
Például az alábbi jelenetből, amikor megnyomja a bal alsó gombot, azt szeretné, hogy balra mozogjon a fal mentén. Némi előrelépés után azonban úgy gondolom, hogy elakad valamiben, és megáll.
Ismerje fel a falak horpadásait pozíció szerint
Circle Collider 2D
Azt hiszem, könnyen érthető, ha csatolja .
A falnak laposnak kell lennie, de ha a falhoz mozgatja, látni fogja, hogy a fal úgy mozog, mintha egyenetlen lenne.
A bogarak és dudorok okai és megoldásai
Úgy tűnik, hogy ezek azért fordulnak elő, mert "a találatok meghatározása mapchip alapon történik". Valójában, amikor a TilemapObject lehetőséget választja, egy zöld vonal jelenik meg azon a helyen, ahol a lekérésészlelés található, és láthatja, hogy ez egy MapTip egységekben rajzolt vonal.
Tehát, ha a mozgó objektum pontosan egy térképchipnek megfelelő vonalon van, akkor azt egy térképchippel elért találatként kell megítélni. Ha a térképzsetonok határán ütközöl, két térképzsetont eltalálnak és megítélnek, így a visszapattanás erőssége megnő.
Úgy gondolom, hogy a probléma megoldásának legjobb módja a találatészlelés kombinálása a mellékelt térképchipekkel. Íme, hogyan kell csinálni:
Válassza ki a "TilemapObject" elemetTilemap Collider 2D
a vizsgáló találatészlelésével, és jelölje be a "Használat kompozitban" jelölőnégyzetet a .
Amint azt a figyelmeztetés kimondja, ennek önmagában nincs hatása, ezért válassza a "Physics 2D -> Composite Collider 2D" lehetőséget az "Összetevő hozzáadása" részből.
A Rigidbody 2D a Composite Collider 2D-vel együtt kerül hozzáadásra.
Ez egy kicsit zavaró, de azt hiszem, megerősítheti, hogy a találatészleléssel rendelkező mapchipek határán eltűnt a zöld vonal.
Nem szeretném, ha a csempetérkép elmozdulna, ezért az összetevő törzstípusát "statikusnak" hagyom Rigidbody 2D
.
Most futtassa a játékot, és próbálja meg mozgatni. Úgy gondolom, hogy még akkor is, ha átlósan mozog a fal mentén, nem fog elkapni, és zökkenőmentesen mozoghat göröngyös mozgás nélkül.
Szüntesse meg a karakter visszaszorítását a falakról
Láthatja, hogy ha mozgatja a karaktert, hogy tolja a falat, majd abbahagyja a mozgást, akkor kissé úgy fog viselkedni, mintha visszapattanna a falról.
Ennek megoldásához válassza ki a karakterobjektumot,Rigidbody 2D
és módosítsa az "Ütközésérzékelés" beállítást "Folyamatos" értékre az összetevőből.
A "nem folytonos" és a "folyamatos" közötti különbség a következő.
Nem folytonos
Az ütközésérzékelés olyan mechanizmus, amely mozgás után gondolkodik. Ez egy olyan forma, amely ütközésérzékelést végez abból az állapotból, ahol mozgatják és beágyazzák a falba. Könnyen érthető, ha trambulinokkal és gumival társítja, de minél jobban beágyazódik, annál visszataszítóbb lesz az erő, és a visszapattanás erősebb lesz. Ehelyett a számítás a költözés után történik, így a feldolgozási költség alacsony.
Folyamatos
Feldolgozásra kerül, miközben meghatározza, hogy mi van az úton. Határozza meg, hogy van-e fal a mozgás előtti és utáni helyzet között, Ha van fal, akkor megítéli az ütközést és megáll, így gyakorlatilag nincs visszaszorítás. Ehelyett a feldolgozási költség kissé növekszik, mert a számítás a mozgás közepén szerepel.
Egy térképobjektum sarkában elakadt
A programtól és a helytől függően néhányat elkapnak, másokat nem, és az ok nem sokat változott. By the way, ez történik szögletes sarkokkal, mint például a Box Collider 2D, és nem lekerekített körökkel.
Még akkor is, ha ilyen titokzatos jelenség fordul elő, jó, ha az ütköző lekerekített sarkai vannak, hogy elkerüljék a bogarakat. Ez a Box Collider 2D-re korlátozódik, de ahhoz, hogy kerek legyen, a karakterobjektum Box Collider 2D komponensének van egy "élsugara", és oda kell beírni egy értéket. Ha az 1-et numerikus egységként adja meg, kerekítés történik az objektumméretnél. Ez a méretétől függ, de jó, ha körülbelül 0,1-et helyezünk el.
Mellesleg, a találati ítélet csak a kerekség méretével nő, ezért kérjük, állítsa be, ha nagy. A Box Collider 2D rendelkezik egy Collider Edit gombbal, amely lehetővé teszi, hogy közvetlenül a nézetben átméretezze a gombra kattintva. Mivel a külső zöld vonal a tényleges találatészlelés, állítsa be a méretet úgy, hogy ne legyen természetellenes.
Ezután futtassa a játékot, hogy megbizonyosodjon arról, hogy nem karcolódik-e meg, és végezze el a beállításokat.