Implementácia detekcie prístupov pomocou dlaždicových máp

Stránka aktualizovaná :
Dátum vytvorenia strany :

Prostredie overovania

Windows
  • Windows 11
Editor jednoty
  • 2021.3.3f1
Vstupný systémový balík
  • 1.3.0

Predpoklady pre tento tip

Nasledujúce nastavenia boli vykonané vopred ako predpoklad pre popis tohto tipu.

Aké sú predpoklady pre tento tip?

O požičiavaní mapových materiálov

Spracované požičané z nasledujúcich stránok.

Implementácia chodiacich znakov

Najprv implementujte mapu a znak, ktorý vykonáva detekciu zásahov. Tento znak je možné presúvať pomocou kurzorových klávesov na klávesnici. Ak však zrealizujete poriadnu prechádzku, bude dlhá a ďaleko od podstaty knižných tipov, takže tentokrát presuniem iba jednoduchý jeden obrázok.

Ak chcete implementovať animácie chôdze, pozrite si nasledujúce tipy:

Po vytvorení projektu pridajte sprite obrázok objektu, ktorý chcete do projektu premiestniť.

Vyberte obrázok a nastavte pixely na jednotku na 32 od inšpektora. Je to preto, že veľkosť jedného štvorca mapového čipu je 32 pixelov, takže sa k tomu hodí. Po nakonfigurovaní kliknite na tlačidlo "Použiť" nižšie.

Umiestnite sprite do pohľadu.

Vytvorte skript na presun sprite. Je to podobné nasledujúcim tipom:

Názov Player skriptu ponechajte ako .

Kód je nasledovný:

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);
    }
  }
}

Pripevnite k sprite, ktorý chcete presunúť.

Spustite hru a skontrolujte, či ju chcete presunúť pomocou klávesnice.

Príprava MapTips

Najprv pripravíme mapchip a vytvoríme mapu. Tento postup je podobný nasledujúcim tipom: MapTipy s 2D Tilemap Extras sú tiež schopné detekcie kolízií, ale nebudú použité v tomto článku, pretože postup bude dlhý.

Pripravte si pôvodný obrázok MapTipu a pridajte ho do projektu. Aby bola operácia zrozumiteľnejšia, pripravte si pre materiál mapového čipu "pochôdzne miesto" a "nepochôdzne miesto".

Nastavte ho pre MapChips v inšpektorovi a kliknite na tlačidlo Použiť. Po nakonfigurovaní otvorte editor Sprite.

Je to 32-pixelový maptip, takže ho rozdelím na 32.

Vyberte kartu palety dlaždíc. Ak nie, zobrazte ho pomocou "Window > 2D -> Tile Palette" z ponuky. Vytvorte novú paletu. Názov je ľubovoľný, ale zatiaľ ho budeme nazývať "MapChipPalette".

Vytvorte priečinok MapChipPalette v časti Scény a zadajte ho.

Pridajte mapový tip tak, že ho presuniete na paletu. Uložte ho do priečinka MapChipPalette, ktorý ste predtým vytvorili.

Vytvorenie mapy

Tentokrát bude úspešnosť mapy vykonaná v jednotkách "Tilemap". Preto vytvoríme dve Tilemapy, "Tilemap bez detekcie zásahov" a "Tilemap s detekciou zásahov".

Najprv vytvorte dve dlaždicové mapy v hierarchii. V mriežke môžete vytvoriť dve. Názvy sú "TilemapObeject" a "TilemapGround" kvôli prehľadnosti.

Najprv vytvorte "TilemapGround". Keďže ide o pohyblivý rozsah, môžete jednoducho položiť zem. Ak je na zemi, môžete zmeniť vzor.

Mimochodom, ak je znak skrytý, vyberte objekt znaku a nastavte poradie Sprite Renderer vrstiev inšpektora na 2. Poradie vrstiev je predvolene 0 a dlaždicová mapa je 0, takže ak ju zvýšite nad túto hodnotu, zobrazí sa v popredí.

Potom vyberte položku TilemapObject a umiestnite mapový tip, ktorý chcete urobiť nehybným. Najprv nastavte poradie vrstiev na 1. Je to preto, aby sa objavil pred zemou.

Takto to vyzerá, ak skryjete zem.

Samozrejme, v tomto bode neexistujú žiadne nastavenia týkajúce sa detekcie kolízie, takže môžete normálne jazdiť po vysokom teréne. Potom nastavíme detekciu kolízie.

Nastavenia detekcie kolízií

Najprv poďme nastaviť postavu. Toto nastavenie je takmer rovnaké ako tipy nižšie, takže preskočím podrobnosti a stručne vysvetlím postup.

Vyberte objekt znaku z hierarchie a vyberte položku Fyzika 2D -> Kruhový urýchľovač 2D z položky Pridať súčasť. Ak je tvar objektu obdĺžnikový, "Box Collider 2D" je v poriadku.

Podobne pridajte "Physics 2D -> Rigidbody 2D".

Nastavte gravitačnú stupnicu na 0, aby ste zabránili Rigidbody 2D automatickému pádu.

Skontrolujte Z v časti Obmedzenia, aby ste zabránili otáčaniu sprite pri zrážke.

Potom vyberte "TilemapObject", ktorý chcete zasiahnuť, a vyberte "Tilemap -> Tilemap Collider 2D" z "Pridať komponent".

To je všetko. Nepotrebujete ani žiadne programovanie. Spustite hru a pokúste sa zasiahnuť objekt, ktorý sa stane stenou. Myslím si, že sa môžete uistiť, že sa to zastaví správne.

Keď to však skutočne trafíte, myslím si, že v správaní budú body obáv. Tu je niekoľko riešení:

Nepohodlné správanie detekcie hitov s mapou a riešeniami

Keď narazíte na stenu, môžete nájsť niekoľko vecí, ktoré vás trápia.

Ak sa pohybujete proti stene, chytíte sa v strede

Box Collider 2D Myslím, že sa to stane, ak používate objekt.

Napríklad zo scény nižšie, keď stlačíte kláves vľavo dole, chcete, aby sa posunul doľava pozdĺž steny. Myslím si však, že po určitom pokroku sa v niečom zasekne a zastaví sa.

Rozpoznávajte priehlbiny v stenách podľa polohy

Circle Collider 2D Myslím, že je ľahké pochopiť, ak pripojíte . Stena by mala byť plochá, ale ak ju posuniete proti stene, uvidíte, že stena sa pohybuje, akoby bola nerovná.

Príčiny a riešenia záhybov a hrbole

Dôvodom, prečo k nim dochádza, sa zdá byť to, že "určenie zásahu sa vykonáva na základe mapového čipu". V skutočnosti, keď vyberiete TilemapObject, na mieste, kde sa nachádza detekcia prístupu, sa zobrazí zelená čiara a môžete vidieť, že ide o čiaru nakreslenú v jednotkách MapTip.

Ak je teda pohybujúci sa objekt na čiare ekvivalentnej presne jednému mapovému čipu, bude posúdený ako zásah s jedným mapovým čipom. Ak sa zrazíte na hranici mapových čipov, budú zasiahnuté a posúdené dva mapové čipy, takže sila odrazu sa zvýši.

Myslím si, že najlepší spôsob, ako vyriešiť tento problém, je kombinovať detekciu zásahov s pripojenými mapchips. Tu je postup, ako to urobiť:

VyberteTilemap Collider 2D "TilemapObject" s detekciou zásahov od inšpektora a skontrolujte "Použiť v kompozite" z .

Ako je uvedené v upozornení, toto samo o sebe nemá žiadny účinok, preto vyberte "Fyzika 2D -> Kompozitný urýchľovač 2D" z "Pridať komponent".

Tuhé telo 2D je pridané spolu s Composite Collider 2D.

Je to trochu mätúce, ale myslím si, že môžete potvrdiť, že zelená čiara na hranici medzi mapchipmi s detekciou zásahov zmizla.

Nechcem, aby sa dlaždicová mapa pohybovala, takže typ tela komponentu ponechám Rigidbody 2D ako "statický".

Teraz spustite hru a pokúste sa ju rozhýbať. Myslím si, že aj keď sa pohybujete diagonálne pozdĺž steny, nezachytí sa a môžete sa pohybovať hladko bez hrboľatého pohybu.

Eliminujte tlaky postáv zo stien

Môžete vidieť, že ak pohnete postavou, aby ste posunuli stenu a potom sa prestali pohybovať, bude sa správať trochu ako odrazená od steny.

Ak to chcete vyriešiť,Rigidbody 2D vyberte objekt znaku a z komponentu zmeňte "Detekcia kolízie" na "Kontinuálne".

Rozdiel medzi "diskontinuálnym" a "kontinuálnym" je nasledovný.

Nesúvislý

Detekcia kolízie je mechanizmus, ktorý myslí po pohybe. Je to forma, ktorá vykonáva detekciu kolízie zo stavu, v ktorom sa pohybuje a zapustí do steny. Je ľahké pochopiť, ak ho spojíte s trampolínami a gumou, ale čím viac je zapustený, tým odpudivejšia bude sila a odraz bude silnejší. Namiesto toho sa výpočet vykonáva po presune, takže náklady na spracovanie sú nízke.

Nepretržitý

Spracováva sa pri určovaní, čo je na ceste. Určite, či je medzi polohou pred a po pohybe stena, Ak existuje stena, posúdi tam kolíziu a zastaví sa, takže prakticky nedochádza k odpudzovaniu. Namiesto toho sa náklady na spracovanie trochu zvyšujú, pretože výpočet je zahrnutý uprostred pohybu.

Zachytené v rohu objektu mapy

V závislosti od programu a miesta sú niektoré chytené a niektoré nie a príčina sa príliš nezmenila. Mimochodom, stáva sa to s uhlovými rohmi, ako je Box Collider 2D, a nie so zaoblenými kruhmi.

Aj keď sa takýto záhadný jav vyskytne, je dobré mať zaoblené rohy urýchľovača, aby ste sa vyhli zádrhelom. Je obmedzený na Box Collider 2D, ale aby to bolo okrúhle, komponent Box Collider 2D objektu postavy má "polomer hrany" a vy tam dáte hodnotu. Ak zadáte číslo 1 ako číselnú jednotku, veľkosť objektu sa zaokrúhli. Záleží na veľkosti, ale je dobré dať asi 0,1.

Mimochodom, úsudok o zásahu sa zvyšuje iba o veľkosť zaoblenia, preto ho upravte, ak je veľký. Box Collider 2D má tlačidlo Úprava urýchľovača, ktoré vám umožňuje zmeniť jeho veľkosť priamo v zobrazení kliknutím na tlačidlo. Keďže vonkajšia zelená čiara je skutočná detekcia zásahu, nastavte veľkosť tak, aby nebola neprirodzená.

Potom spustite hru, aby ste sa uistili, že sa nepoškriabe, a vykonajte úpravy.