Implementeer hitdetectie voor elk type MapChip

Pagina bijgewerkt :
Aanmaakdatum van pagina :

Verificatieomgeving

Ramen
  • Voor Windows 11
Unity Editor
  • 2021.3.3f1
Input systeem pakket
  • 1.3.0

Vereisten voor deze tip

De volgende instellingen zijn vooraf gemaakt als uitgangspunt voor de beschrijving van deze tip.

Wat zijn de voorwaarden voor deze tip?

Over het lenen van kaartmateriaal

We verwerken geleend van de volgende sites.

Eerst

Deze keer worden MapChips in één TileMap geplaatst en wordt besloten of er hitbepaling moet worden uitgevoerd op basis van het type MapTip dat is geplaatst.

Aangezien deze tip grotendeels hetzelfde is als een andere Tip "Implementeer hitdetectie met tilemaps", Zie daar voor een uitgebreide uitleg. Hier wordt alleen de procedure uitgelegd voor dezelfde inhoud en worden alleen de verschillen toegevoegd.

Implementatie van wandelende karakters

Bereid eerst een sprite-afbeelding voor die de speler zal besturen om de hitdetectiebewerking uit te voeren en deze aan uw project toe te voegen. Deze keer is de grootte van de maptip 32 pixels, dus ik zal de afbeelding even groot maken.

Ik zal de loopanimatie deze keer weglaten omdat de procedure lang zal duren als deze wordt geïmplementeerd. Als u het wilt implementeren, raadpleegt u de volgende tips.

Selecteer de afbeelding die u aan uw project hebt toegevoegd. Omdat we de eenheid willen matchen met de kaartchip, stelt u het "Aantal pixels per eenheid" in op "32".

Eenmaal geconfigureerd, klikt u op de knop "Toepassen" hieronder.

Zodra de afbeelding is ingesteld, plaatst u de afbeelding in de weergave en voegt u het object toe.

Stel het bewegingsproces van het personage in. Voeg het script toe en laat het de naam Player .

Het script ziet er als volgt uit: Dit is een eenvoudig bewegingsproces waarbij de sprite met het toetsenbord wordt verplaatst.

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

Het script dat u maakt, wordt gekoppeld aan het tekenobject.

Voer het spel uit en controleer of het personage met het toetsenbord meebeweegt.

Kaartinfo voorbereiden

Bereid een kaarttipafbeelding voor en voeg deze toe aan uw project. Naarmate het aantal kaartchips toeneemt, wordt het instellen lastig, dus deze keer hebben we slechts twee vierkanten voorbereid, een die kan worden gelopen en een die niet kan lopen.

Selecteer de afbeeldingen die u aan uw project hebt toegevoegd en configureer de instellingen voor MapChips. Zie de volgende tips voor meer informatie:

Klik na de configuratie op de knop Toepassen en vervolgens op de knop Sprite Editor.

Deel door 32 pixels.

Selecteer het tabblad Tegelpalet om een palet te maken. Als er geen tabbladen zijn, kunt u deze weergeven vanuit het menu met "Venster > 2D - > Tegelpalet". De paletnaam kan van alles zijn, maar hier is het "MapChipPalette".

Omdat we het in een map zullen opslaan, maakt u een nieuwe map "MapChipPalette" in de map Scene en geeft u deze op.

Er is een map MapChipPalette aan het project toegevoegd.

Vervolgens voegt u MapTips toe aan het palet. Sleep de gesplitste kaarttipafbeelding naar het palet.

MapTips zijn toegevoegd aan het palet.

Een kaart maken

Laat de instellingen voor hitdetectie links liggen en maak eerst de kaart. U kunt hitdetectie later instellen. Voeg eerst een tilemap toe aan uw hiërarchie.

Eenmaal toegevoegd, selecteert u Tilemap. In de weergave wordt een raster weergegeven.

Stel eerst een mapchip in die geen muur in de weergave wordt.

Voorlopig heb ik het overal neergelegd.

Plaats vervolgens de stenen maptip die als muur zal dienen.

Deze keer was er geen probleem, maar als je personage achter de kaart komt te staan, stel dan de Laagvolgorde in op een getal groter dan Tilemap.

Natuurlijk, zelfs als je het spel op dit punt verplaatst, glipt je door de muur en loop je.

MapChip hit detectie instellingen

Vanaf hier zullen we instellen of we voor elk type kaartchip een hitoordeel moeten invoeren. Open eerst de map "MapChipPalette" die u hebt gemaakt toen u het palet maakte.

Er is een kaartinfo ingesteld in het palet binnenin, dus selecteer eerst een kaartinfo waar je op kunt lopen.

Stel in de controle de waarde voor Collidertype in op Geen. Later voegt u een instelling voor botsingsdetectie toe aan Tilemap, maar als u deze instelt op "Geen", voorkomt u dat deze mapchip botst.

De andere stenen maptip is ingesteld op "Grid". Omdat het deze keer geen transparante kaartinfo is, is er geen probleem met "sprite", maar als u het instelt op "sprite", wordt het niet beoordeeld door op het transparante deel van de afbeelding te drukken.

Dat is alles wat er is aan MapTip. Het is gemakkelijk omdat er deze keer maar twee zijn, maar als je een groot aantal kaartchips hebt, moet je zoveel instellen.

Instellingen voor botsingsdetectie

Vanaf hier is het bijna hetzelfde als de inhoud van "Implementeer hitdetectie met tilemap".

Maak eerst de nodige instellingen voor tekenbotsingsdetectie. Voeg "Physics 2D -> Circle Collider 2D" toe als component. Deze keer is de sprite rond, dus ik heb er een cirkel van gemaakt, maar selecteer doos of capsule op basis van de vorm.

We zullen ook "Physics 2D -> Rigidbody 2D" toevoegen.

Stel de zwaartekrachtschaal in op 0 om te voorkomen dat de zwaartekracht naar beneden valt. Controleer ook Z voor "Fix rotation" om te voorkomen dat de sprite roteert.

Voeg voor Tilemap de component Tilemap -> Tilemap Collider 2D toe.

Je kunt zien dat er een groene lijn is toegevoegd rond de stenen kaarttip in de weergave. Dit betekent dat hitdetectie alleen is ingesteld voor stenen. U kunt zien dat de collidertype-instelling van de kaarttip in het bovenstaande palet wordt weergegeven.

Probeer het spel uit te voeren en naar de muur te lopen. Ik denk dat je ervoor kunt zorgen dat het personage goed stopt voor de muur. U kunt zien dat het gemakkelijk kan worden geïmplementeerd zonder programma's te schrijven die verband houden met hitdetectie.

MapChip-hitdetectie combineren

Zoals vermeld in de onderstaande tips, wanneer u het daadwerkelijk verplaatst, is het gedrag van muurhitdetectie een beetje vreemd. De oorzaak en tijdelijke oplossing worden beschreven in de onderstaande tips.

Door het hitdetectiegedeelte van de kaartchip te combineren, wordt het vreemde gedrag echter gecorrigeerd en wordt de verwerkingsbelasting tegelijkertijd verminderd, dus laten we het minimaal doen.

Vink eerst "Gebruik in composiet" aan in Tilemap Collider 2D.

Selecteer onder Component toevoegen de optie Physics 2D -> Composite Collider 2D.

"Rigidbody 2D" zal ook worden toegevoegd, dus maak "Body Type" naar "Static".

Dan denk ik dat je kunt bevestigen dat het trefferoordeel van de steen niet voor elke kaartchip is en gecombineerd is.

Voer nu het spel uit en zorg ervoor dat het goed werkt.