Praca z NavMeshAgent w Unity

W Unity, NavMeshAgent jest potężnym komponentem, który pozwala na implementację wyszukiwania ścieżek i nawigacji dla postaci lub obiektów w grze. Wykorzystuje wbudowany system nawigacji Unity do obliczania ścieżek na powierzchni NavMesh. W tym samouczku omówimy podstawy konfigurowania i używania NavMeshAgent z przykładami kodu.

Warunki wstępne

  • Podstawowa znajomość Unity interfejsu i koncepcji tworzenia gier.
  • Unity zainstalowany w twoim systemie (wersja 2017 lub nowsza).

Konfigurowanie NavMesh w Unity

Zanim zaczniemy używać NavMeshAgent, musimy skonfigurować NavMesh w naszej scenie.

  1. Utwórz powierzchnię NavMesh:

    • Idź do 'GameObject -> 3D Object -> NavMesh Surface'. Spowoduje to utworzenie nowego obiektu GameObject z dołączonym komponentem 'NavMeshSurface'.
    • Dostosuj ustawienia komponentu NavMesh Surface zgodnie z potrzebami swojej sceny.
  2. Upiecz NavMesh:

    • Kliknij przycisk 'Bake' w komponencie 'NavMesh Surface', aby wygenerować NavMesh dla swojej sceny.
    • Upewnij się, że otoczenie (teren, przeszkody itp.) jest odpowiednio skonfigurowane, aby umożliwić dokładne odnajdywanie ścieżki.

Używanie NavMeshAgent w kodzie

Teraz napiszmy kod wykonujący ruch GameObject przy użyciu narzędzia NavMeshAgent.

Krok 1: Dołącz NavMeshAgent do GameObject

  • Dołącz komponent NavMeshAgent do obiektu GameObject w edytorze Unity. Możesz to zrobić wybierając obiekt GameObject, klikając 'Add Component', a następnie dodając 'NavMeshAgent'.

Krok 2: Napisz skrypt ruchu

  • Utwórz nowy skrypt C# (np. 'PlayerController.cs') i dołącz go do obiektu GameObject za pomocą komponentu NavMeshAgent. Otwórz skrypt w preferowanym edytorze kodu.
using UnityEngine;
using UnityEngine.AI;

public class PlayerController : MonoBehaviour
{
    private NavMeshAgent navMeshAgent;

    void Start()
    {
        navMeshAgent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        // Check for player input or any other conditions to trigger movement
        if (Input.GetMouseButton(0)) // Example: Move towards mouse click position
        {
            MoveToClickPosition();
        }
    }

    void MoveToClickPosition()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit))
        {
            // Move NavMeshAgent towards the clicked position
            navMeshAgent.SetDestination(hit.point);
        }
    }
}

Krok 3: Skonfiguruj scenę i przetestuj

  • Upewnij się, że na scenie znajduje się obiekt GameObject z NavMeshAgent i załączonym skryptem.
  • Naciśnij Play w edytorze Unity i obserwuj zachowanie.
  • Kliknij gdziekolwiek na powierzchni 'NavMesh', a GameObject powinien przesunąć się w stronę tej pozycji.

Streszczenie

W tym samouczku nauczyłeś się konfigurować i używać NavMeshAgent do wyszukiwania ścieżek i nawigacji w Unity. Wykonując te kroki i przykłady kodu, możesz zaimplementować podstawowy ruch postaci lub obiektów w swojej grze, korzystając z wbudowanego systemu nawigacji Unity.