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:
- Opret et nyt 3D-projekt i Unity.
- Tilføj et Plane for at tjene som jorden.
- Tilføj en Cube eller en hvilken som helst 3D-model for at repræsentere afspilleren. Navngiv den Player.
- Tilføj en anden Cube- eller 3D-model for at repræsentere NPC. Navngiv den NPC.
- Placer afspilleren og NPC på forskellige positioner på flyet.
Trin 2: Bagning af NavMesh
For at bruge Unitys NavMesh-system skal vi bage navigationsnettet:
- Vælg jordplanet i hierarkiet.
- I Inspector skal du klikke på Tilføj komponent og tilføje en NavMeshSurface.
- I NavMeshSurface-komponenten skal du sikre dig, at flyet er markeret som en overflade, der kan gås.
- Klik på knappen Bake i NavMeshSurface-komponenten for at generere NavMesh.
- 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:
- Vælg NPC i hierarkiet.
- I Inspector skal du klikke på Add Component og tilføje en NavMeshAgent.
- 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:
- Højreklik i projektpanelet og vælg Opret > C# Script. Navngiv den NPCChase.
- Dobbeltklik på scriptet for at åbne det i din kodeeditor.
- 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:
- Vælg NPC i hierarkiet.
- Træk og slip NPCChase scriptet på NPC'en.
- I Inspector skal du finde feltet Player i scriptet.
- Træk Player GameObject fra hierarkiet til feltet Player.
Trin 6: Test af scenen
Sådan tester du din opsætning:
- Tryk på knappen Play i Unity Editor.
- Flyt rundt på afspilleren (f.eks. ved hjælp af tastatur- eller controller-input).
- 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.