Hoe je een NPC de speler in Unity laat achtervolgen met behulp van NavMesh

In deze tutorial gebruiken we Unity's NavMesh-systeem om een ​​NPC te maken die de speler achtervolgt. NavMesh biedt efficiënte padvinding en obstakelvermijding, waardoor het ideaal is voor AI-gedrag in 3D-omgevingen.

Stap 1: De scène opzetten

Voordat we NavMesh implementeren, hebben we een goede scène-instelling nodig:

  1. Maak een nieuw 3D-project in Unity.
  2. Voeg een Vlak toe om als grond te dienen.
  3. Voeg een Cube of een ander 3D-model toe om de speler te representeren. Noem het Player.
  4. Voeg nog een Cube of 3D-model toe om de NPC te representeren. Noem het NPC.
  5. Plaats de speler en de NPC op verschillende posities in het vliegtuig.

Stap 2: Het NavMesh bakken

Om het NavMesh-systeem van Unity te gebruiken, moeten we het navigatiemesh bakken:

  1. Selecteer het grondvlak in de hiërarchie.
  2. Klik in de Inspector op Component toevoegen en voeg een NavMeshSurface toe.
  3. Zorg ervoor dat in het NavMeshSurface-component het vlak is gemarkeerd als een beloopbaar oppervlak.
  4. Klik op de knop Bake in het NavMeshSurface-component om de NavMesh te genereren.
  5. Optioneel: Als je obstakels hebt (bijvoorbeeld muren), zorg er dan voor dat ze NavMeshObstacle-componenten hebben om de beweging van NPC's te blokkeren.

Stap 3: Een NavMeshAgent toevoegen

Nu gaan we de NPC voorbereiden op het gebruik van Unity's padvinding:

  1. Selecteer de NPC in de hiërarchie.
  2. Klik in de Inspector op Component toevoegen en voeg een NavMeshAgent toe.
  3. Pas indien nodig de eigenschappen van NavMeshAgent aan, zoals snelheid, acceleratie en remweg.

Stap 4: Het Chase-script schrijven

Vervolgens maken we een script waarmee de NPC de speler achtervolgt:

  1. Klik met de rechtermuisknop in het Project-paneel en selecteer Create > C# Script. Noem het NPCChase.
  2. Dubbelklik op het script om het te openen in uw code-editor.
  3. Vervang de standaardcode door het volgende:
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);
        }
    }
}

Stap 5: Het script en de spelerreferentie toewijzen

Ten slotte wijzen we het script toe en stellen we de Player-referentie in:

  1. Selecteer de NPC in de hiërarchie.
  2. Sleep het script NPCChase naar de NPC.
  3. Zoek in de Inspector naar het veld Player in het script.
  4. Sleep het Player GameObject uit de hiërarchie naar het Player-veld.

Stap 6: De scène testen

Om uw opstelling te testen:

  1. Klik op de Play-knop in de Unity-editor.
  2. Beweeg de speler (bijvoorbeeld via het toetsenbord of de controller).
  3. Observeer hoe de NPC dynamisch het pad van de speler bepaalt en hem achtervolgt. Daarbij ontwijkt hij waar mogelijk obstakels.

Optioneel: Gedrag aanpassen

Je kunt het gedrag van je NPC verder verfijnen:

  • Stopafstand: Pas de stopafstand van de NavMeshAgent aan om de NPC op een bepaalde afstand te laten stoppen.
  • Obstakelvermijding: Zorg ervoor dat obstakels NavMeshObstacle-componenten hebben voor nauwkeurige vermijding.
  • Animaties: Gebruik animaties om de bewegingen van NPC's realistischer te maken door animaties te activeren op basis van snelheid.

Conclusie

We hebben een NPC gemaakt die de speler dynamisch achtervolgt met behulp van Unity's NavMesh-systeem. Deze aanpak is robuust en kan eenvoudig worden uitgebreid voor complexere AI-gedragingen. Experimenteer met verschillende instellingen om de padvinding van de NPC aan te passen aan de behoeften van je game.