So lässt man mit NavMesh einen NPC den Spieler in Unity verfolgen
In diesem Tutorial verwenden wir Unitys NavMesh-System, um einen NPC zu erstellen, der den Spieler verfolgt. NavMesh ermöglicht effiziente Wegfindung und Hindernisvermeidung und ist somit ideal für KI-Verhalten in 3D-Umgebungen.
Schritt 1: Einrichten der Szene
Bevor wir NavMesh implementieren, benötigen wir ein entsprechendes Szenen-Setup:
- Erstellen Sie ein neues 3D-Projekt in Unity.
- Fügen Sie eine Ebene als Boden hinzu.
- Fügen Sie einen Würfel oder ein beliebiges 3D-Modell hinzu, um den Spieler darzustellen. Nennen Sie es Spieler.
- Fügen Sie ein weiteres Cube oder 3D-Modell hinzu, um den NPC darzustellen. Nennen Sie es NPC.
- Platzieren Sie den Spieler und den NPC an verschiedenen Positionen auf der Ebene.
Schritt 2: Backen des NavMesh
Um das NavMesh-System von Unity zu verwenden, müssen wir das Navigationsnetz backen:
- Wählen Sie die Grundebene in der Hierarchie aus.
- Klicken Sie im Inspektor auf Komponente hinzufügen und fügen Sie eine NavMeshSurface hinzu.
- Stellen Sie in der NavMeshSurface-Komponente sicher, dass die Ebene als begehbare Oberfläche markiert ist.
- Klicken Sie in der NavMeshSurface-Komponente auf die Schaltfläche Bake, um das NavMesh zu generieren.
- Optional: Wenn Sie Hindernisse haben (z. B. Wände), stellen Sie sicher, dass sie über NavMeshObstacle-Komponenten verfügen, um die Bewegung von NPCs zu blockieren.
Schritt 3: Hinzufügen eines NavMeshAgent
Jetzt bereiten wir den NPC darauf vor, die Pfadfindung von Unity zu verwenden:
- Wählen Sie den NPC in der Hierarchie aus.
- Klicken Sie im Inspektor auf Komponente hinzufügen und fügen Sie einen NavMeshAgent hinzu.
- Passen Sie die NavMeshAgent-Eigenschaften wie Geschwindigkeit, Beschleunigung und Bremsweg nach Bedarf an.
Schritt 4: Das Chase-Skript schreiben
Als Nächstes erstellen wir ein Skript, mit dem der NPC den Spieler verfolgt:
- Klicken Sie mit der rechten Maustaste in das Projektfenster und wählen Sie Erstellen > C#-Skript. Nennen Sie es NPCChase.
- Doppelklicken Sie auf das Skript, um es in Ihrem Code-Editor zu öffnen.
- Ersetzen Sie den Standardcode durch Folgendes:
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);
}
}
}
Schritt 5: Zuweisen des Skripts und der Player-Referenz
Zum Schluss weisen wir das Skript zu und richten die Player-Referenz ein:
- Wählen Sie den NPC in der Hierarchie aus.
- Ziehen Sie das Skript NPCChase per Drag & Drop auf den NPC.
- Suchen Sie im Inspector das Feld Player im Skript.
- Ziehen Sie das Player-GameObject aus der Hierarchie in das Player-Feld.
Schritt 6: Testen der Szene
So testen Sie Ihr Setup:
- Drücken Sie die Play-Taste im Unity-Editor.
- Bewegen Sie den Player (z. B. mithilfe der Tastatur oder Controller-Eingabe).
- Beobachten Sie, wie der NPC dynamisch den Weg findet und den Spieler verfolgt und dabei gegebenenfalls Hindernissen ausweicht.
Optional: Anpassen des Verhaltens
Sie können das Verhalten Ihres NPCs weiter verfeinern:
- Anhalteweg: Passen Sie den Anhalteweg des NavMeshAgent an, damit der NPC in einer bestimmten Entfernung anhält.
- Hindernisvermeidung: Stellen Sie sicher, dass Hindernisse über NavMeshObstacle-Komponenten verfügen, um eine genaue Vermeidung zu ermöglichen.
- Animationen: Verwenden Sie Animationen, um die Bewegung der NPCs realistischer zu gestalten, indem Sie geschwindigkeitsbasierte Animationen auslösen.
Abschluss
Wir haben einen NPC erstellt, der den Spieler mithilfe des NavMesh-Systems von Unity dynamisch verfolgt. Dieser Ansatz ist robust und kann problemlos für komplexere KI-Verhaltensweisen erweitert werden. Experimentieren Sie mit verschiedenen Einstellungen, um die Wegfindung des NPCs an die Anforderungen Ihres Spiels anzupassen.