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:

  1. Utwórz nowy projekt 3D w Unity.
  2. Dodaj płaszczyznę Plane, która będzie stanowić podłoże.
  3. Dodaj Cube lub dowolny model 3D, aby reprezentować Playera. Nazwij go Player.
  4. Dodaj kolejny Cube lub model 3D, aby reprezentować NPC. Nazwij go NPC.
  5. 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ą:

  1. Wybierz płaszczyznę podłoża w hierarchii.
  2. W Inspektorze kliknij Dodaj komponent i dodaj NavMeshSurface.
  3. W komponencie NavMeshSurface upewnij się, że płaszczyzna jest oznaczona jako powierzchnia, po której można chodzić.
  4. Kliknij przycisk Bake w komponencie NavMeshSurface, aby wygenerować NavMesh.
  5. 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:

  1. Wybierz NPC w hierarchii.
  2. W Inspektorze kliknij Dodaj komponent i dodaj NavMeshAgent.
  3. 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:

  1. Kliknij prawym przyciskiem myszy w panelu Projekt i wybierz Utwórz > Skrypt C#. Nadaj mu nazwę NPCChase.
  2. Kliknij dwukrotnie skrypt, aby otworzyć go w edytorze kodu.
  3. 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:

  1. Wybierz NPC w hierarchii.
  2. Przeciągnij i upuść skrypt NPCChase na NPC.
  3. W Inspektorze znajdź w skrypcie pole Player.
  4. Przeciągnij obiekt Player GameObject z hierarchii do pola Player.

Krok 6: Testowanie sceny

Aby przetestować konfigurację:

  1. Naciśnij przycisk Odtwórz w edytorze Unity.
  2. Przesuwaj odtwarzacz (np. za pomocą klawiatury lub kontrolera).
  3. 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.