Unity: ИИ для перемещения игроков в 3D игре

Этот урок описывает реализацию ИИ для самостоятельного перемещения игроков в Unity к указанной точке. Сначала добавим визуальное отображение выбранных игроков.

Визуализация выбранных игроков

Для визуализации используем куб, отображаемый над выбранной машинкой. В будущем этот куб будет индикатором здоровья игрока, изменяя свои размеры.

  1. Откройте префаб машинки для редактирования.
  2. Добавьте куб (3D объект). Сделайте его первым дочерним элементом машинки.
  3. Создайте материал, назовите его «healthbar» и назначьте кубу. Измените цвет материала на более яркий, немного увеличив значение «Smoothness».
  4. Изначально скройте куб, сделав его неактивным.

Код, активирующий/деактивирующий куб в зависимости от выбора машинки, добавим в скрипт SelectController.

В скрипте SelectController, в участке кода, отвечающем за отпускание кнопки мыши, добавьте:

  • После добавления элементов в массив, для каждого элемента:

    • Обратитесь к первому дочернему элементу (transform.GetChild(0)).
    • Активируйте его (gameObject.SetActive(true)).
  • Перед очисткой списка выбранных машинок, для каждого элемента списка:

    • Обратитесь к первому дочернему элементу.
    • Деактивируйте его (gameObject.SetActive(false)).

Теперь при выборе машинки над ней отображается куб, а при снятии выбора – исчезает.

Настройка навигации

Реализация передвижения игроков использует систему навигации Unity.

  1. Откройте окно Navigation (Windows -> Navigation).
  2. Оставьте на сцене только поверхность для движения машинок (например, Ground), скрыв остальные элементы.
  3. Установите галочку «Static» для объекта Ground, убедитесь в наличии галочки «Navigation Static» и включенном параметре «Generate Colliders».
  4. Нажмите «Bake» в окне Navigation для генерации навигационной сетки. Это может занять некоторое время.
  5. Верните на сцену все элементы дизайна, кроме непроходимых (песок, море в примере).
  6. Снова нажмите «Bake». Навигационная сетка учтёт препятствия.
  7. Проверьте корректность коллайдеров на препятствиях. Ошибки в настройке коллайдеров могут приводить к ошибкам навигации.

Добавление NavMeshAgent

Для перемещения машинок по навигационной сетке добавьте им компонент NavMeshAgent.

  1. Откройте префаб машинки для редактирования.
  2. Добавьте компонент NavMeshAgent.
  3. Настройте параметры NavMeshAgent:
    • Увеличьте speed (скорость).
    • Настройте acceleration (ускорение) и stoppingDistance (дистанция остановки).
    • Увеличьте radius (радиус коллайдера), чтобы предотвратить прохождение машинок друг сквозь друга.

Программирование передвижения

Добавим код в метод Update скрипта для обработки передвижения игроков при нажатии левой кнопки мыши.

Добавьте условие:

if (Input.GetMouseButtonDown(0) && players.Count > 0)
{
    // Код для определения точки нажатия и передвижения игроков
}

Для определения точки нажатия используйте ScreenPointToRay и Raycast. Создайте переменную RaycastHit edgingTarget.

Внутри цикла, для каждого активного игрока:

  • Получите компонент NavMeshAgent.
  • Вызовите метод SetDestination с координатами точки нажатия.

Тестирование

Проверьте работу системы. Выберите одну или несколько машинок и укажите точку на карте. Машинки должны самостоятельно перемещаться к указанной точке, объезжая препятствия.

В этом уроке мы реализовали систему передвижения для ИИ в Unity, используя навигационную сетку и компонент NavMeshAgent. Теперь игроки могут самостоятельно перемещаться по карте, обходя препятствия.

Что будем искать? Например,программа