{"id":3827,"url":"\/distributions\/3827\/click?bit=1&hash=a3421833d15d1c84d64094d7d2023b5ba4157196f84512612cd445af573903a5","title":"\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043f\u0438\u0448\u0435\u0442 \u043d\u0430 Java \u0438 \u0445\u043e\u0447\u0435\u0442 \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443","buttonText":"\u042d\u0442\u043e \u043f\u0440\u043e \u043c\u0435\u043d\u044f","imageUuid":"2b70606f-740c-5d85-8a71-8a33c5f66557","isPaidAndBannersEnabled":false}
Инди
Nil Efremenkov

OVERGUN: DEVLog1

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

Геймплей с новыми роботами

Legacy

Изначально я делал логику исходя из типичных представлений как должен вести себя ИИ. То есть вот робот, он обнаруживает игрока, начинает за ним следовать, если игрок в пределах дистанции для атаки, то начинает атаковать. Если игрок долгое время на глаза не попадается, значит идёт патрулировать. Вот реализовав это, стал понимать что как то это не клеится в концепцию динамического шутера. Быстрое передвижение юнитов не означает что шутер будет динамичным.

Долго время в игре было всего 4 робота. Подрывник, дрон, турель, и робот с пулемётами. Получились у меня они максимально коряво. Спавн новых и уничтожение старых заметно фризил игру несмотря на использование пула. Анимации были без использования костей. Коллизия слишком детальная, чего как бы не нужно. Плюс архитектура кода самих ботов оставляла желать лучшего. В общем, выглядело это как сборная солянка костылей. Стало понятно что переделка не обходима, если я хочу вообще зарелизиться. 4 робота на всю игру это совсем ни о чём, а добавлять новые по старой схеме просто смысла нет и занимает много времени.

Переделка

Новый ИИ ставил следующие задачи: весело, быстро, новых роботов можно добавлять без болезненно. В игре ИИ разделён на часть которая отвечает за базовый функционал роботов(куда стрелять, как стрелять, куда идти как идти) и часть отвечающая за принятия решений. Переделки коснулось всё, кроме системы которая отвечает за принятие решений. Она была лишь изменена под новые компоненты, но со своей работой справлялась хорошо.

Робот ремонтник

Редизайн

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

Добавил и не мало новых роботов. Некоторые из них:

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

Летающая мина. Атакует только когда игрок находится рядом. Летит на него и рядом взрывается.

Код

Что касается логики, то я максимально разделил её на компоненты для пере использования. Например: компонент который отвечает за повороты, передвижение, полёт, взрыв, стрельбу, получение урона, и дополнительную индикацию на экране. как дополнительный индикатор у подрывника.

Индикаторы подрывников.

Имитация деятельности

Ещё когда были старые роботы, пришлось лепить систему которая их куда ни будь отправляла, и решала когда и кто атакует. В этой системе есть параметр который отвечает за количество атакующих. Для разных сложностей разное количество, для normal’а = 4. В тот момент, когда 4 робота из всей толпы атакует игрока, остальные делают вид бурной деятельности :) Они просто перемещаются от точки к точке, которые раскиданы по арене. Те кто не атакует выбирает точки для маршрута которые находятся максимально далеко от игрока. Точки которые ближе всего к игроку используют роботы которые атакуют СЕЙЧАС. Пересчёт дистанции и выборка атакующих роботов производится раз в секунду.

Способ выборки атакующих

Для выборки я использовал концепцию Utility AI. Суть её заключается в том что каждое действие которое имеет в себе Агент ИИ, набирает очки, в зависимости от обстоятельств. Действие которые набрало больше всего очков - выполняется. По такому принципу рассчитываются атакующие роботы. Каждый параметр: расстояние до игрока, видит ли игрок робота, целится ли он в него, наносит ли он ему урон - конвертируются в очки. Такую систему очень удобно балансировать с помощью кривых. Коэффициенты очков можно настраивать отдельно для каждого типа, исходя из его особенностей. Например для роботов которые взрываются, коэффициенты чуть ниже остальных, потому что атака у них не прямая как у стреляющих. Подрывник может пробегать мимо игрока просто к точке по маршруту, и при этом взорваться ему никто не помещает, несмотря на то что его нет в списке атакующих в этот момент. А для робота с дробовиком и щитом самый высокий коэффициент на параметр дистанции, потому что смысл от дробовика будет только если игрок находится близко.

Неочевидная проблема

Все локации которые я уже сделал, хоть их и не много готовых, отправились в топку. Причина этому что старый дизайн сковывает движения ИИ и игрока. Сейчас локации кажутся очень тесными. Пространство нужно увеличивать как минимум раза в два. Поэтому приходится сейчас делать перепланировку того что уже есть, а при создании будущих локациях, уже буду учитывать это. Радует хотя бы то что ассеты локаций мне переделывать не придётся :)

P.S Скоро наконец будет страница в steam

Следить за игрой:

0
13 комментариев
Написать комментарий...
Nick Ryzhov

Модели роботов отличные

Ответить
Развернуть ветку
Nil Efremenkov
Автор

Спасибо

Ответить
Развернуть ветку
Andrew Fa

Офигенно проработанные модели. Вообще выглядит сочно, прям так технологичненько.
И логика ИИ с очками действий кажется весьма разумной идеей. Лойс определенно

Ответить
Развернуть ветку
Nil Efremenkov
Автор

Благодарю

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Марик Омаргалиев

если это арена, помимо мелких ботов, гигантские разрушаемые боссы будут?

Ответить
Развернуть ветку
Nil Efremenkov
Автор

Только боссы.

Ответить
Развернуть ветку
Boris Gavrikov

Может всех чуть-чуть покрупнее сделать? Возможно многие не любят выцеливать совсем крохотных врагов и довольно мало хороших шутеров где есть враги-пауки и тп.

Ответить
Развернуть ветку
Insane One

Один из немногих девблогов, которые хочется читать, спасибо за материал :) Хотелось бы больше технических деталей в следующих частях блога, если они планируются.

Ответить
Развернуть ветку
Nil Efremenkov
Автор

Спасибо. Конечно планируются.
Я наоборот старался много не писать технического :D

Ответить
Развернуть ветку
Antony Sumin

Роботы четкие, но на демке они все медленные или спят, поэтому несколько странное выглядит сверхскоростной герой: как будто СерьезныйСэм попал в музей восковых фигур :D
Так что, имхо, надо либо героя замедлять, либо роботов ускорять

Ответить
Развернуть ветку
Grand Paintball

Очень красиво выглядит.

Ответить
Развернуть ветку
Yes, Your Grace

Враги — круто, но оружие совсем никакое. Полное ощущение, что ты совершенно не менял оружие за весь ролик. Фидбека ноль. А в шутанах это очень важный, я б даже сказал основополагающий аспект.

Ответить
Развернуть ветку
Читать все 13 комментариев
null