Hur man får en NPC att jaga spelaren i Unity med hjälp av NavMesh

I den här handledningen kommer vi att använda Unitys NavMesh-system för att skapa en NPC som jagar spelaren. NavMesh tillhandahåller effektiv sökväg och undvikande av hinder, vilket gör den idealisk för AI-beteende i 3D-miljöer.

Steg 1: Konfigurera scenen

Innan vi implementerar NavMesh behöver vi en ordentlig sceninställning:

  1. Skapa ett nytt 3D-projekt i Unity.
  2. Lägg till ett Plane för att fungera som marken.
  3. Lägg till en Cube eller någon 3D-modell för att representera spelaren. Döp det till Spelare.
  4. Lägg till en annan Cube eller 3D-modell för att representera NPC:n. Döp det till NPC.
  5. Placera spelaren och NPC på olika positioner på planet.

Steg 2: Baka NavMesh

För att använda Unitys NavMesh-system måste vi baka navigationsnätet:

  1. Välj jordplanet i hierarkin.
  2. I Inspector, klicka på Add Component och lägg till en NavMeshSurface.
  3. Se till att planet är markerat som en gångbar yta i NavMeshSurface-komponenten.
  4. Klicka på knappen Bake i NavMeshSurface-komponenten för att generera NavMesh.
  5. Valfritt: Om du har hinder (t.ex. väggar), se till att de har NavMeshObstacle-komponenter för att blockera NPC-rörelser.

Steg 3: Lägga till en NavMeshAgent

Nu förbereder vi NPC för att använda Unitys sökväg:

  1. Välj NPC i hierarkin.
  2. I Inspector, klicka på Add Component och lägg till en NavMeshAgent.
  3. Justera NavMeshAgent-egenskaperna efter behov, såsom hastighet, acceleration och stoppsträcka.

Steg 4: Skriva Chase Script

Därefter skapar vi ett skript för att få NPC:n att jaga spelaren:

  1. Högerklicka i projektpanelen och välj Skapa > C#-skript. Döp det till NPCChase.
  2. Dubbelklicka på skriptet för att öppna det i din kodredigerare.
  3. Ersätt standardkoden med följande:
using UnityEngine;
using UnityEngine.AI;

public class NPCChase : MonoBehaviour
{
    public Transform player; // Reference to the player's position
    private NavMeshAgent agent; // Reference to the NavMeshAgent

    void Start()
    {
        // Get the NavMeshAgent component
        agent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        if (player != null)
        {
            // Set the agent's destination to the player's position
            agent.SetDestination(player.position);
        }
    }
}

Steg 5: Tilldela skriptet och spelarreferensen

Slutligen tilldelar vi skriptet och ställer in spelarreferensen:

  1. Välj NPC i hierarkin.
  2. Dra och släpp NPCChase-skriptet på NPC:n.
  3. I Inspector, leta reda på Player-fältet i skriptet.
  4. Dra Player GameObject från hierarkin till spelarfältet.

Steg 6: Testa scenen

Så här testar du din inställning:

  1. Tryck på knappen Play i Unity Editor.
  2. Flytta runt spelaren (t.ex. med tangentbords- eller kontrollinmatning).
  3. Observera att NPC dynamiskt hittar och jagar spelaren, undvik hinder där det är tillämpligt.

Valfritt: Anpassa beteende

Du kan förfina din NPC:s beteende ytterligare:

  • Stoppsträcka: Justera NavMeshAgents Stoppsträcka för att få NPC:n att stanna vid ett visst avstånd.
  • Hinderundvikande: Se till att hinder har NavMeshObstacle-komponenter för exakt undvikande.
  • Animationer: Använd animationer för att göra NPC-rörelsen mer realistisk genom att trigga animationer baserade på hastighet.

Slutsats

Vi har skapat en NPC som dynamiskt jagar spelaren med Unitys NavMesh-system. Detta tillvägagångssätt är robust och kan enkelt utökas för mer komplexa AI-beteenden. Experimentera med olika inställningar för att skräddarsy NPC:s sökväg efter ditt spels behov.