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:
- Opprett et nytt 3D-prosjekt i Unity.
- Legg til et Plane for å tjene som bakken.
- Legg til en Cube eller en hvilken som helst 3D-modell for å representere spilleren. Gi det navnet Spiller.
- Legg til en annen Cube eller 3D-modell for å representere NPC. Gi det navnet NPC.
- Plasser spilleren og NPC på forskjellige posisjoner på flyet.
Trinn 2: Bake NavMesh
For å bruke Unitys NavMesh-system, må vi bake navigasjonsnettet:
- Velg bakkeplanet i hierarkiet.
- I Inspektøren klikker du Add Component og legger til en NavMeshSurface.
- I NavMeshSurface-komponenten, sørg for at flyet er merket som en gangbar overflate.
- Klikk på Bake-knappen i NavMeshSurface-komponenten for å generere NavMesh.
- 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:
- Velg NPC i hierarkiet.
- I Inspektøren klikker du Add Component og legger til en NavMeshAgent.
- 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:
- Høyreklikk i prosjektpanelet og velg Create > C# Script. Gi det navnet NPCChase.
- Dobbeltklikk på skriptet for å åpne det i koderedigeringsprogrammet.
- 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:
- Velg NPC i hierarkiet.
- Dra og slipp NPCChase-skriptet på NPC-en.
- Finn Player-feltet i skriptet i Inspector.
- Dra Player GameObject fra hierarkiet til spillerfeltet.
Trinn 6: Testing av scenen
For å teste oppsettet:
- Trykk på Play-knappen i Unity Editor.
- Flytt spilleren rundt (f.eks. ved å bruke tastatur- eller kontrollerinndata).
- 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.