
NavMesh (Navigation Mesh) — мощный инструмент в Unity, который позволяет создавать искусственный интеллект для персонажей, способный передвигаться по сцене, избегая препятствий. В этом руководстве мы подробно разберем, как использовать NavMesh с учетом потребностей новичков.
Что такое NavMesh?
NavMesh — это поверхность, которая представляет область, по которой могут перемещаться персонажи с использованием встроенной системы навигации Unity. Он автоматически рассчитывает пути, избегая статичных препятствий на сцене.
Основные компоненты, связанные с NavMesh:
- NavMesh Surface — область, где персонажи могут перемещаться.
- NavMesh Agent — компонент, отвечающий за перемещение персонажа по NavMesh.
- NavMesh Obstacle — объекты, которые агент будет обходить.
Подготовка сцены для использования NavMesh
1. Создайте сцену
Создайте новую сцену или откройте уже существующую. Убедитесь, что у вас есть объекты, которые будут выступать в роли земли (например, Plane или Terrain) и препятствий (например, кубы).
2. Установите NavMesh Surface
Для начала убедимся, что в проект добавлена поддержка NavMesh:
- В Unity откройте Window > Package Manager.
- Найдите и установите пакет AI Navigation (если он ещё не установлен).
Теперь добавим NavMesh Surface:
- Выберите объект земли (например, Plane).
- В Inspector нажмите Add Component и добавьте NavMesh Surface.
- Настройте параметры NavMesh Surface:
- Agent Radius и Agent Height — задают размеры персонажей.
- Include Layers — выберите слои, которые должны быть частью NavMesh.
- Нажмите Bake, чтобы создать NavMesh.
На сцене появится голубая область, показывающая доступные для передвижения участки.
Добавление персонажа с NavMesh Agent
1. Создайте объект персонажа
Добавьте в сцену 3D-объект, который будет выполнять роль персонажа (например, Capsule).
2. Настройте NavMesh Agent
- Выберите объект персонажа.
- В Inspector нажмите Add Component и добавьте NavMesh Agent.
- Настройте параметры NavMesh Agent:
- Speed — скорость передвижения.
- Angular Speed — скорость поворота.
- Stopping Distance — дистанция, на которой агент остановится перед целью.
3. Добавьте целевую точку
Создайте простой объект-цель:
- Добавьте на сцену объект (например, Sphere).
- Перетащите объект в область, где он находится на NavMesh.
Скрипт для управления агентом
Теперь напишем скрипт, чтобы агент мог двигаться к цели.
- Создайте новый скрипт, назовите его, например,
AgentController
. - Добавьте следующий код:
using UnityEngine;
using UnityEngine.AI;
public class AgentController : MonoBehaviour
{
public Transform target; // Ссылка на цель
private NavMeshAgent agent;
void Start()
{
// Получаем компонент NavMeshAgent
agent = GetComponent<NavMeshAgent>();
}
void Update()
{
// Задаем цель для агента
if (target != null)
{
agent.SetDestination(target.position);
}
}
}
- Присвойте этот скрипт объекту персонажа.
- Перетащите объект-цель (Sphere) в поле
Target
в Inspector.
Теперь персонаж будет автоматически двигаться к цели.
Добавление препятствий (NavMesh Obstacle)
Чтобы сделать сцену реалистичнее, можно добавить препятствия:
- Выберите объект, который будет выступать в роли препятствия (например, Cube).
- В Inspector нажмите Add Component и добавьте NavMesh Obstacle.
- Настройте параметры:
- Carve — включает вырезание области на NavMesh для препятствия.
Советы для работы с NavMesh
- Оптимизация:
- Избегайте слишком большого количества NavMesh Obstacle, это может замедлить производительность.
- Используйте “Carve” только если препятствие часто меняет положение.
- Динамические изменения NavMesh:
- Если вы хотите, чтобы NavMesh изменялся в реальном времени, изучите компонент NavMesh Modifier Volume.
- Тестирование:
- Всегда тестируйте движение агента, чтобы убедиться, что он правильно обходит препятствия.
Заключение
NavMesh в Unity — это простой и мощный инструмент для создания навигации персонажей. С его помощью даже новички могут быстро добавить реалистичное поведение искусственного интеллекта в свои проекты. Надеюсь, это руководство поможет вам освоить основы и вдохновит на эксперименты в ваших играх!
Читайте так же: