Sådan får du en NPC til at jage afspilleren i Unity ved hjælp af NavMesh

I denne vejledning vil vi bruge Unitys NavMesh-system til at skabe en NPC, der jagter afspilleren. NavMesh giver effektiv stifinding og undgåelse af forhindringer, hvilket gør den ideel til AI-adfærd i 3D-miljøer.

Trin 1: Opsætning af scenen

Før vi implementerer NavMesh, har vi brug for en ordentlig sceneopsætning:

  1. Opret et nyt 3D-projekt i Unity.
  2. Tilføj et Plane for at tjene som jorden.
  3. Tilføj en Cube eller en hvilken som helst 3D-model for at repræsentere afspilleren. Navngiv den Player.
  4. Tilføj en anden Cube- eller 3D-model for at repræsentere NPC. Navngiv den NPC.
  5. Placer afspilleren og NPC på forskellige positioner på flyet.

Trin 2: Bagning af NavMesh

For at bruge Unitys NavMesh-system skal vi bage navigationsnettet:

  1. Vælg jordplanet i hierarkiet.
  2. I Inspector skal du klikke på Tilføj komponent og tilføje en NavMeshSurface.
  3. I NavMeshSurface-komponenten skal du sikre dig, at flyet er markeret som en overflade, der kan gås.
  4. Klik på knappen Bake i NavMeshSurface-komponenten for at generere NavMesh.
  5. Valgfrit: Hvis du har forhindringer (f.eks. vægge), skal du sikre dig, at de har NavMeshObstacle-komponenter til at blokere NPC-bevægelser.

Trin 3: Tilføjelse af en NavMeshAgent

Nu forbereder vi NPC til at bruge Unitys stifinding:

  1. Vælg NPC i hierarkiet.
  2. I Inspector skal du klikke på Add Component og tilføje en NavMeshAgent.
  3. Juster NavMeshAgent-egenskaberne efter behov, såsom hastighed, acceleration og bremselængde.

Trin 4: Skrivning af Chase Script

Dernæst opretter vi et script for at få NPC'en til at jage afspilleren:

  1. Højreklik i projektpanelet og vælg Opret > C# Script. Navngiv den NPCChase.
  2. Dobbeltklik på scriptet for at åbne det i din kodeeditor.
  3. Erstat 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);
        }
    }
}

Trin 5: Tildeling af script og spillerreference

Til sidst tildeler vi scriptet og opsætter Player-referencen:

  1. Vælg NPC i hierarkiet.
  2. Træk og slip NPCChase scriptet på NPC'en.
  3. I Inspector skal du finde feltet Player i scriptet.
  4. Træk Player GameObject fra hierarkiet til feltet Player.

Trin 6: Test af scenen

Sådan tester du din opsætning:

  1. Tryk på knappen Play i Unity Editor.
  2. Flyt rundt på afspilleren (f.eks. ved hjælp af tastatur- eller controller-input).
  3. Observer, at NPC dynamisk finder og jager afspilleren, og undgå forhindringer, hvor det er relevant.

Valgfrit: Tilpasning af adfærd

Du kan justere din NPC's adfærd yderligere:

  • Stopafstand: Juster NavMeshAgents Stopafstand for at få NPC til at stoppe ved et bestemt område.
  • Undgåelse af forhindringer: Sørg for, at forhindringer har NavMesh-hindringer for nøjagtig undgåelse.
  • Animationer: Brug animationer til at gøre NPC-bevægelsen mere realistisk ved at udløse animationer baseret på hastighed.

Konklusion

Vi har skabt en NPC, der dynamisk jagter afspilleren ved hjælp af Unitys NavMesh-system. Denne tilgang er robust og kan nemt udvides til mere kompleks AI-adfærd. Eksperimenter med forskellige indstillinger for at skræddersy NPC'ens stifinding til dit spils behov.