Hvordan få en NPC til å jage spilleren i Unity ved å bruke NavMesh

I denne opplæringen bruker vi Unitys NavMesh-system for å lage en NPC som jager spilleren. NavMesh gir effektiv veisøking og unngåelse av hindringer, noe som gjør den ideell for AI-adferd i 3D-miljøer.

Trinn 1: Sette opp scenen

Før vi implementerer NavMesh, trenger vi et skikkelig sceneoppsett:

  1. Opprett et nytt 3D-prosjekt i Unity.
  2. Legg til et Plane for å tjene som bakken.
  3. Legg til en Cube eller en hvilken som helst 3D-modell for å representere spilleren. Gi det navnet Spiller.
  4. Legg til en annen Cube eller 3D-modell for å representere NPC. Gi det navnet NPC.
  5. Plasser spilleren og NPC på forskjellige posisjoner på flyet.

Trinn 2: Bake NavMesh

For å bruke Unitys NavMesh-system, må vi bake navigasjonsnettet:

  1. Velg bakkeplanet i hierarkiet.
  2. I Inspektøren klikker du Add Component og legger til en NavMeshSurface.
  3. I NavMeshSurface-komponenten, sørg for at flyet er merket som en gangbar overflate.
  4. Klikk på Bake-knappen i NavMeshSurface-komponenten for å generere NavMesh.
  5. Valgfritt: Hvis du har hindringer (f.eks. vegger), sørg for at de har NavMeshObstacle-komponenter for å blokkere NPC-bevegelse.

Trinn 3: Legge til en NavMeshAgent

Nå vil vi forberede NPC til å bruke Unitys stifinning:

  1. Velg NPC i hierarkiet.
  2. I Inspektøren klikker du Add Component og legger til en NavMeshAgent.
  3. Juster NavMeshAgent-egenskapene etter behov, for eksempel hastighet, akselerasjon og stoppdistanse.

Trinn 4: Skrive Chase Script

Deretter lager vi et skript for å få NPC til å jage spilleren:

  1. Høyreklikk i prosjektpanelet og velg Create > C# Script. Gi det navnet NPCChase.
  2. Dobbeltklikk på skriptet for å åpne det i koderedigeringsprogrammet.
  3. Erstatt standardkoden med følgende:
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);
        }
    }
}

Trinn 5: Tilordne skriptet og spillerreferansen

Til slutt tildeler vi skriptet og setter opp spillerreferansen:

  1. Velg NPC i hierarkiet.
  2. Dra og slipp NPCChase-skriptet på NPC-en.
  3. Finn Player-feltet i skriptet i Inspector.
  4. Dra Player GameObject fra hierarkiet til spillerfeltet.

Trinn 6: Testing av scenen

For å teste oppsettet:

  1. Trykk på Play-knappen i Unity Editor.
  2. Flytt spilleren rundt (f.eks. ved å bruke tastatur- eller kontrollerinndata).
  3. Observer at NPC dynamisk finner og jager spilleren, og unngå hindringer der det er aktuelt.

Valgfritt: Tilpasse atferd

Du kan avgrense din NPCs oppførsel ytterligere:

  • Stoppeavstand: Juster NavMeshAgents Stoppdistanse for å få NPC til å stoppe ved et bestemt område.
  • Hindringsunngåelse: Sørg for at hindringer har NavMesh Hindringskomponenter for nøyaktig unngåelse.
  • Animasjoner: Bruk animasjoner for å gjøre NPC-bevegelsen mer realistisk ved å utløse animasjoner basert på hastighet.

Konklusjon

Vi har laget en NPC som dynamisk jager spilleren ved hjelp av Unitys NavMesh-system. Denne tilnærmingen er robust og kan enkelt utvides for mer kompleks AI-atferd. Eksperimenter med forskjellige innstillinger for å skreddersy NPCs stifinning til spillets behov.