Как заставить NPC преследовать игрока в Unity с помощью NavMesh
В этом уроке мы будем использовать систему Unity NavMesh для создания NPC, преследующего игрока. NavMesh обеспечивает эффективный поиск пути и обход препятствий, что делает ее идеальной для поведения ИИ в 3D-средах.
Шаг 1: Подготовка сцены
Перед реализацией NavMesh нам нужна правильная настройка сцены:
- Создайте новый 3D-проект в Unity.
- Добавьте Plane, который будет служить землей.
- Добавьте Cube или любую 3D-модель для представления Игрока. Назовите ее Player.
- Добавьте еще один Cube или 3D-модель для представления NPC. Назовите его NPC.
- Разместите игрока и NPC в разных местах на плоскости.
Шаг 2: Запекание NavMesh
Чтобы использовать систему NavMesh Unity, нам необходимо запечь навигационную сетку:
- Выберите плоскость земли в иерархии.
- В инспекторе нажмите Добавить компонент и добавьте NavMeshSurface.
- В компоненте NavMeshSurface убедитесь, что плоскость отмечена как поверхность, по которой можно ходить.
- Нажмите кнопку Bake в компоненте NavMeshSurface, чтобы сгенерировать NavMesh.
- Необязательно: если у вас есть препятствия (например, стены), убедитесь, что они имеют компоненты NavMeshObstacle, чтобы блокировать движение NPC.
Шаг 3: Добавление NavMeshAgent
Теперь подготовим NPC к использованию поиска пути Unity:
- Выберите NPC в иерархии.
- В инспекторе нажмите Добавить компонент и добавьте NavMeshAgent.
- При необходимости настройте свойства NavMeshAgent, такие как скорость, ускорение и тормозной путь.
Шаг 4: Написание сценария погони
Далее мы создадим скрипт, который заставит NPC преследовать Игрока:
- Щелкните правой кнопкой мыши на панели Project и выберите Create > C# Script. Назовите его NPCChase.
- Дважды щелкните скрипт, чтобы открыть его в редакторе кода.
- Замените код по умолчанию следующим:
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);
}
}
}
Шаг 5: Назначение сценария и ссылки на проигрыватель
Наконец, мы назначим скрипт и настроим ссылку на проигрыватель:
- Выберите NPC в иерархии.
- Перетащите скрипт NPCChase на NPC.
- В Инспекторе найдите поле Player в скрипте.
- Перетащите игровой объект Player из иерархии в поле Player.
Шаг 6: Тестирование сцены
Чтобы проверить вашу настройку:
- Нажмите кнопку Воспроизвести в редакторе Unity.
- Перемещайте игрока (например, с помощью клавиатуры или контроллера).
- Наблюдайте, как NPC динамично ищет путь и преследует игрока, избегая препятствий, где это возможно.
Необязательно: настройка поведения
Вы можете дополнительно улучшить поведение вашего NPC:
- Расстояние остановки: Отрегулируйте Расстояние остановки NavMeshAgent, чтобы NPC остановился на определенном расстоянии.
- Обход препятствий: Убедитесь, что препятствия имеют компоненты NavMeshObstacle для точного обхода.
- Анимации: Используйте анимацию, чтобы сделать движения NPC более реалистичными, запуская анимацию в зависимости от скорости.
Заключение
Мы создали NPC, который динамически преследует игрока с помощью системы NavMesh Unity. Этот подход надежен и может быть легко расширен для более сложного поведения ИИ. Экспериментируйте с различными настройками, чтобы адаптировать поиск пути NPC к потребностям вашей игры.