Этот урок описывает реализацию ИИ для самостоятельного перемещения игроков в Unity к указанной точке. Сначала добавим визуальное отображение выбранных игроков.
Визуализация выбранных игроков
Для визуализации используем куб, отображаемый над выбранной машинкой. В будущем этот куб будет индикатором здоровья игрока, изменяя свои размеры.
- Откройте префаб машинки для редактирования.
- Добавьте куб (3D объект). Сделайте его первым дочерним элементом машинки.
- Создайте материал, назовите его «healthbar» и назначьте кубу. Измените цвет материала на более яркий, немного увеличив значение «Smoothness».
- Изначально скройте куб, сделав его неактивным.
Код, активирующий/деактивирующий куб в зависимости от выбора машинки, добавим в скрипт SelectController.
В скрипте SelectController, в участке кода, отвечающем за отпускание кнопки мыши, добавьте:
- После добавления элементов в массив, для каждого элемента:
- Обратитесь к первому дочернему элементу (transform.GetChild(0)).
- Активируйте его (gameObject.SetActive(true)).
- Перед очисткой списка выбранных машинок, для каждого элемента списка:
- Обратитесь к первому дочернему элементу.
- Деактивируйте его (gameObject.SetActive(false)).
Теперь при выборе машинки над ней отображается куб, а при снятии выбора – исчезает.
Настройка навигации
Реализация передвижения игроков использует систему навигации Unity.
- Откройте окно Navigation (Windows -> Navigation).
- Оставьте на сцене только поверхность для движения машинок (например, Ground), скрыв остальные элементы.
- Установите галочку «Static» для объекта Ground, убедитесь в наличии галочки «Navigation Static» и включенном параметре «Generate Colliders».
- Нажмите «Bake» в окне Navigation для генерации навигационной сетки. Это может занять некоторое время.
- Верните на сцену все элементы дизайна, кроме непроходимых (песок, море в примере).
- Снова нажмите «Bake». Навигационная сетка учтёт препятствия.
- Проверьте корректность коллайдеров на препятствиях. Ошибки в настройке коллайдеров могут приводить к ошибкам навигации.
Добавление NavMeshAgent
Для перемещения машинок по навигационной сетке добавьте им компонент NavMeshAgent.
- Откройте префаб машинки для редактирования.
- Добавьте компонент NavMeshAgent.
- Настройте параметры NavMeshAgent:
- Увеличьте speed (скорость).
- Настройте acceleration (ускорение) и stoppingDistance (дистанция остановки).
- Увеличьте radius (радиус коллайдера), чтобы предотвратить прохождение машинок друг сквозь друга.
Программирование передвижения
Добавим код в метод Update скрипта для обработки передвижения игроков при нажатии левой кнопки мыши.
Добавьте условие:
if (Input.GetMouseButtonDown(0) && players.Count > 0)
{
// Код для определения точки нажатия и передвижения игроков
}
Для определения точки нажатия используйте ScreenPointToRay и Raycast. Создайте переменную RaycastHit edgingTarget.
Внутри цикла, для каждого активного игрока:
- Получите компонент NavMeshAgent.
- Вызовите метод SetDestination с координатами точки нажатия.
Тестирование
Проверьте работу системы. Выберите одну или несколько машинок и укажите точку на карте. Машинки должны самостоятельно перемещаться к указанной точке, объезжая препятствия.
В этом уроке мы реализовали систему передвижения для ИИ в Unity, используя навигационную сетку и компонент NavMeshAgent. Теперь игроки могут самостоятельно перемещаться по карте, обходя препятствия.