Implementera träffdetektering för varje typ av MapChip

Sidan uppdaterad :
Datum för skapande av sida :

Verifiering miljö

Windows
  • Fönster 11
Unity-redaktör
  • 2021.3.3F1
Paket för inmatningssystem
  • 1.3.0

Förutsättningar för det här tipset

Följande inställningar har gjorts i förväg som en förutsättning för beskrivningen av detta tips.

Vilka är förutsättningarna för detta tips?

Om att låna kartmaterial

Vi behandlar lånade från följande platser.

Först

Den här gången placeras MapChips i en TileMap, och det beslutas om träffbestämning ska utföras enligt vilken typ av MapTip som placeras.

Eftersom detta tips i stort sett är detsamma som ett annat tips "Implementera träffdetektering med tilemaps", Se där för en detaljerad förklaring. Här förklaras endast proceduren för samma innehåll, och endast skillnaderna läggs till.

Implementering av gående tecken

Förbered först en sprite-bild som spelaren ska styra för att utföra träffidentifieringen och lägga till den i projektet. Den här gången är karttipsets storlek 32 pixlar, så jag kommer att göra bilden i samma storlek.

Jag kommer att utelämna gånganimationen den här gången eftersom proceduren kommer att vara lång om den genomförs. Om du vill implementera det, se följande tips.

Markera bilden som du har lagt till i projektet. Eftersom vi vill matcha enheten med kartchipet, ställ in "Antal pixlar per enhet" till "32".

När du har konfigurerat klickar du på knappen "Apply" nedan.

När bilden är inställd släpper du bilden i vyn och lägger till objektet.

Ställ in karaktärens rörelseprocess. Lägg till skriptet och låt det heta Player .

Skriptet ser ut så här: Detta är en enkel rörelseprocess som flyttar sprite med tangentbordet.

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

Skriptet du skapar bifogas till teckenobjektet.

Kör spelet och kontrollera om karaktären rör sig med tangentbordet.

Förbereda karttips

Förbered en karttipsbild och lägg till den i projektet. När antalet kartchips ökar blir inställningen besvärlig, så den här gången har vi bara förberett två rutor, en som kan gå och en som inte kan gå.

Välj de bilder du har lagt till i projektet och konfigurera inställningarna för MapChips. Mer information finns i följande tips:

När du har konfigurerat klickar du på knappen Apply och sedan på knappen Sprite Editor.

Dela med 32 pixlar.

Välj fliken Panelpalett för att skapa en palett. Om det inte finns några flikar kan du visa dem från menyn med "Window > 2D -> Tile Palette". Palettnamnet kan vara vad som helst, men här är det "MapChipPalette".

Eftersom vi sparar den i en mapp skapar du en ny "MapChipPalette" -mapp i scenmappen och anger den.

En MapChipPalette-mapp har lagts till i projektet.

Nu ska du lägga till Karttips på paletten. Dra och släpp den delade karttipsbilden på paletten.

Karttips har lagts till i paletten.

Skapa en karta

Lämna inställningarna för träffdetektering åt sidan och skapa kartan först. Du kan ställa in träffidentifiering senare. Lägg först till en panelkarta i hierarkin.

När du har lagt till väljer du Tilemap. Vyn visar ett rutnät.

Ställ först in ett mapchip som inte blir en vägg i vyn.

För tillfället lade jag det överallt.

Placera sedan stenkartspetsen som kommer att fungera som väggen.

Den här gången var det inga problem, men om din karaktär kommer att ligga bakom kartan, ställ in lagerordningen till ett nummer som är större än Tilemap.

Naturligtvis, även om du flyttar spelet vid denna tidpunkt, kommer du att glida genom väggen och gå.

Inställningar för upptäckt av MapChip

Härifrån kommer vi att ställa in om vi ska ange träffbedömning för varje typ av kartchip. Öppna först mappen "MapChipPalette" som du skapade när du skapade paletten.

Det finns ett karttips i paletten inuti, så välj först ett karttips som du kan gå på.

Från Granskaren anger du värdet Collider Type till None. Senare kommer du att lägga till en kollisionsdetekteringsinställning till Tilemap, men om du ställer in den på "Ingen" förhindrar du att detta mapchip kolliderar.

Det andra stenkarttipset är inställt på "Rutnät". Eftersom det inte är ett transparent karttips den här gången är det inga problem med "sprite", men om du ställer in det på "sprite" kommer det inte att bedömas genom att träffa den transparenta delen av bilden.

Det är allt som finns i MapTip. Det är enkelt eftersom det bara finns två av dem den här gången, men om du har ett stort antal kartchips måste du ställa in så mycket.

Inställningar för kollisionsdetektering

Härifrån är det nästan detsamma som innehållet i "Implementera träffdetektering med tilemap".

Gör först nödvändiga inställningar för detektering av teckenkollision. Lägg till "Physics 2D -> Circle Collider 2D" som en komponent. Den här gången är spriten rund, så jag gjorde den till en cirkel, men välj låda eller kapsel enligt formen.

Vi kommer också att lägga till "Physics 2D -> Rigidbody 2D".

Ställ in tyngdkraftsskalan på 0 för att förhindra att tyngdkraften faller ner. Kontrollera också Z för "Fix rotation" för att förhindra att sprite roterar.

För Tilemap lägger du till komponenten Tilemap -> Tilemap Collider 2D.

Du kan se att en grön linje har lagts till runt stenkarttipset i vyn. Detta innebär att träffdetektering endast är inställd för stenar. Du kan se att inställningen för kollidertyp för karttipset på paletten ovan återspeglas.

Försök att springa spelet och gå mot väggen. Jag tror att du kan se till att karaktären stannar framför väggen ordentligt. Du kan se att det enkelt kan implementeras utan att skriva några program relaterade till träffdetektering.

Kombinera MapChip träffdetektering

Som nämnts i tipsen nedan, när du faktiskt flyttar den, är beteendet för väggträffdetektering lite konstigt. Orsaken och lösningen beskrivs i tipsen nedan.

Men genom att kombinera träffdetekteringsdelen av kartchipet kommer det konstiga beteendet att korrigeras och bearbetningsbelastningen minskas samtidigt, så låt oss göra det åtminstone.

Kontrollera först "Använd i komposit" i Tilemap Collider 2D.

Under Lägg till komponent väljer du Physics 2D -> Composite Collider 2D.

"Rigidbody 2D" kommer också att läggas till, så gör "Body Type" till "Static".

Sedan tror jag att du kan bekräfta att träffdomen av stenen inte är för varje kartchip och kombineras.

Kör nu spelet och se till att det fungerar korrekt.