Мех научился думать
🧠 Мех научился думать
Чтоб я ещё раз в одно лицо сел что-то пилить на Unreal Engine — да ни за что! Ну или за большие деньги… 😂
Разработка занимает просто какое-то неприличное количество времени. Кажется, я уже месяц или даже больше не запускал ни Steam, ни Сыч, а прогресс всё равно идёт малюсенькими шагами.
Ну хватит нытья. Давайте о прогрессе!
🤖 1. Искусственный интеллект меха
Теперь у меха есть полноценная система поведения на основе Behavior Tree — дерева решений, которое определяет, что противник должен делать в текущей ситуации.
Пока логика довольно простая, но мех уже умеет самостоятельно искать игрока, выбирать позицию для атаки и стрелять.
Как это работает:
🔹 Патрулирование. Пока игрока нет в поле зрения, мех выбирает случайную точку на арене, прокладывает маршрут и идёт к ней. Добрался, немного постоял — выбирает следующую. В общем, занят важными делами.
🔹 Зрение. За обнаружение игрока отвечает система AI Perception. Как только Крог попадает в поле зрения меха, тот переключается в боевой режим. Если игрок скрывается, мех ещё 5 секунд помнит последнюю известную позицию цели, а потом возвращается к поиску.
🔹 Выбор позиции. Увидев игрока, мех не просто прёт напролом, а пытается найти подходящее место для стрельбы. Для этого используется EQS (Environment Query System). Система оценивает возможные позиции с учётом заданных условий, например расстояния до игрока и возможности видеть цель.
🔹 Прицеливание и стрельба. Добравшись до выбранной позиции, мех разворачивается к игроку и открывает огонь. Перед выстрелом проверяется линия видимости: движок отправляет невидимый луч в сторону цели. Если между мехом и игроком находится стена или другое препятствие, выстрел не проходит.
Так что укрытия на арене работают по-настоящему. Можно не только бегать от огромной железяки, но и использовать окружение, чтобы пережить обстрел. 😉
🦾 2. Пришлось отдельно настроить навигацию
Тут обнаружилась интересная проблема: мех довольно крупный, и стандартные настройки навигации для него не подходили. Он застревал в местах, где персонаж-человек спокойно проходил.
Пришлось настроить отдельный профиль навигации с учётом габаритов меха: радиус 1,2 м и высота 5 м.
После этого он начал нормально прокладывать маршруты с учётом собственных размеров.
❤️ 3. Здоровье, урон и смерть
Но какой смысл делать противников умными, если их нельзя убить?
Поэтому следующим этапом стала базовая система здоровья и урона.
Вместо того чтобы реализовывать её отдельно для каждого персонажа, я вынес общую логику в базовый класс. Теперь её могут использовать Крог, мехи и остальные противники.
Принцип работы следующий:
Пуля попадает в персонажа.
Рассчитывается урон с учётом базового урона оружия и соответствующих модификаторов.
Здоровье персонажа уменьшается.
Когда здоровье заканчивается, запускается логика смерти.
Для смерти добавил анимацию, после которой тело переходит в ragdoll — физическую симуляцию скелета. В результате персонаж падает не по заранее заданной траектории, а под воздействием физики.
Всю общую логику смерти вынес в базовую систему, чтобы не приходилось заново реализовывать её для каждого нового противника.
Заодно немного навёл порядок в архитектуре проекта: появился общий класс врага, от которого наследуются мех и Скрабы-ремонтники.
Меньше копипасты — меньше потенциальных багов. 🙏
🚧 Что дальше?
Теперь у меня есть базовый боевой цикл противника: мех патрулирует арену, обнаруживает игрока, выбирает позицию, стреляет и может погибнуть.
Разумеется, до действительно интересного поведения ещё далеко. Нужно настраивать баланс, улучшать логику принятия решений и добавлять реакции на происходящее вокруг.
Но фундамент уже есть.
А значит, можно постепенно переходить от просто работающих механик к тому, чтобы сражаться с мехами было действительно интересно.