Jak sprawić, by NPC gonił gracza w Unity za pomocą NavMesh
W tym samouczku użyjemy systemu NavMesh Unity, aby stworzyć NPC, który goni gracza. NavMesh zapewnia wydajne wyszukiwanie ścieżki i unikanie przeszkód, co czyni go idealnym do zachowania SI w środowiskach 3D.
Krok 1: Przygotowanie sceny
Przed wdrożeniem NavMesh potrzebujemy odpowiedniego skonfigurowania sceny:
- Utwórz nowy projekt 3D w Unity.
- Dodaj płaszczyznę Plane, która będzie stanowić podłoże.
- Dodaj Cube lub dowolny model 3D, aby reprezentować Playera. Nazwij go Player.
- Dodaj kolejny Cube lub model 3D, aby reprezentować NPC. Nazwij go NPC.
- Umieść gracza i postać niezależną w różnych miejscach na płaszczyźnie.
Krok 2: Wypiekanie NavMesh
Aby móc korzystać z systemu NavMesh Unity, musimy wypalić siatkę nawigacyjną:
- Wybierz płaszczyznę podłoża w hierarchii.
- W Inspektorze kliknij Dodaj komponent i dodaj NavMeshSurface.
- W komponencie NavMeshSurface upewnij się, że płaszczyzna jest oznaczona jako powierzchnia, po której można chodzić.
- Kliknij przycisk Bake w komponencie NavMeshSurface, aby wygenerować NavMesh.
- Opcjonalnie: Jeśli masz przeszkody (np. ściany), upewnij się, że mają komponenty NavMeshObstacle, aby zablokować ruch postaci NPC.
Krok 3: Dodawanie NavMeshAgent
Teraz przygotujemy NPC do wykorzystania funkcji Pathfinding Unity:
- Wybierz NPC w hierarchii.
- W Inspektorze kliknij Dodaj komponent i dodaj NavMeshAgent.
- W razie potrzeby dostosuj właściwości NavMeshAgent, takie jak prędkość, przyspieszenie i droga hamowania.
Krok 4: Pisanie skryptu pościgu
Następnie utworzymy skrypt, który sprawi, że NPC będzie gonił gracza:
- Kliknij prawym przyciskiem myszy w panelu Projekt i wybierz Utwórz > Skrypt C#. Nadaj mu nazwę NPCChase.
- Kliknij dwukrotnie skrypt, aby otworzyć go w edytorze kodu.
- Zastąp domyślny kod następującym:
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);
}
}
}
Krok 5: Przypisywanie skryptu i odniesienia do gracza
Na koniec przypiszemy skrypt i skonfigurujemy odniesienie do gracza:
- Wybierz NPC w hierarchii.
- Przeciągnij i upuść skrypt NPCChase na NPC.
- W Inspektorze znajdź w skrypcie pole Player.
- Przeciągnij obiekt Player GameObject z hierarchii do pola Player.
Krok 6: Testowanie sceny
Aby przetestować konfigurację:
- Naciśnij przycisk Odtwórz w edytorze Unity.
- Przesuwaj odtwarzacz (np. za pomocą klawiatury lub kontrolera).
- Obserwuj, jak NPC dynamicznie wyznacza ścieżkę i goni gracza, omijając przeszkody, gdy jest to możliwe.
Opcjonalnie: dostosowywanie zachowania
Możesz jeszcze bardziej udoskonalić zachowanie swojego NPC:
- Odległość zatrzymania: Dostosuj Odległość zatrzymania NavMeshAgent, aby NPC zatrzymał się w określonej odległości.
- Omijanie przeszkód: Upewnij się, że przeszkody mają komponenty NavMeshObstacle w celu dokładnego ich omijania.
- Animacje: Użyj animacji, aby ruch NPC był bardziej realistyczny, uruchamiając animacje w oparciu o prędkość.
Wniosek
Stworzyliśmy NPC, który dynamicznie goni gracza, korzystając z systemu NavMesh Unity. To podejście jest solidne i można je łatwo rozszerzyć o bardziej złożone zachowania AI. Eksperymentuj z różnymi ustawieniami, aby dostosować wyszukiwanie ścieżki przez NPC do potrzeb swojej gry.