Lekérésészlelés megvalósítása csempetérképekkel

Oldal frissítve :
Oldal létrehozásának dátuma :

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?

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.