Как 10 раз переделать AI в игре и наконец успокоиться? (Devlog рогалика #3)

Или, как понять, что чем проще, тем лучше.

Всем привет. Продолжаем пилить шутер-рогалик от третьего лица.

Более подробно об игре можете прочитать в самой первой статье.

Если говорить кратко, то за последние 2 недели мы сделали много всего, но пока не успели собрать это все воедино.

Искусственный "интеллект" мобов

Сейчас у нас 2 моба, один ближнего боя, второй дальнего.
Моб дальнего боя в целом работает довольно просто и с ним почти нет проблем, f вот моба ближнего боя мы изначально пытались сделать сложным, добавить взаимодействия и т.д. Вот так должен был работать:

1. Видит игрока
2. Сообщает другим мобам об игрока
3. Проверяет, что вокруг игрока не находятся больше N врагов - если находится, то бегает вокруг игрока
4. Если нет, то постепенно приближается к игроку (Выбирает случайную точку между собой и игроком и бежит к ней)
5. Атакует игрока случайной атакой

Вроде все 5 пунктов, но в каждом куча условий и действий.

В целом проблемы такие:

1. Использовали CrowdController в UE, благодаря которому AI должны красиво оббегать друг друга и окружать игрока, но по какой-то причине мобы постоянно дергались вместо нормальных поворотов.

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

3. Постепенной перемещение к игроку так же выглядит странновато - когда враг бежит на игрока и резко останавливается, то это выглядит, как баг.
Тут можно попробовать настроить точки так, чтобы враги пытались заходить с флангов.

Теперь AI работает гораздо проще - видит игрока -> бежит -> атакует.

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

Сейчас мобы работаю вот так

Да, они толкают и застревают друг в друге, но если не перебарщивать с количеством врагов, то думаю это не так критично будет.

Возможно стоит добавить атаку в движении т.к. сейчас от них легко убежать (или даже упрыгать), но посмотрим, как это будет работать на локации вместе с другими врагами.

Шейдеры

Накатили шейдеры (спасибо нашему левел дизайнеру), чтобы не запариваться над детализацией моделей.

На кубиках и манекенах - обводка, cell shader, toon shader, на полу и стенах только toon shader

Уровень

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

Как 10 раз переделать AI в игре и наконец успокоиться? (Devlog рогалика #3)
Как 10 раз переделать AI в игре и наконец успокоиться? (Devlog рогалика #3)
Как 10 раз переделать AI в игре и наконец успокоиться? (Devlog рогалика #3)

Улучшение оружия

Наконец-то сделали логику улучшения оружия. В игре будут артефакты, которые можно будет вставлять в оружие и менять характеристики, как в Noita с жезлами.

Пока что срабатывает на оверлап с игроком, потом переделаем, чтобы можно было управлять артефактами через инвентарь.

Для примера сделал 3 улучшалки:
- синяя - увеличивает скорость стрельбы и перезарядки;
- серая - увеличивает скорость стрельбы и урон;
- оранжевая - добавляет дополнительную пулю при выстреле

Что дальше?

А дальше собирать то, что есть воедино, тестить, править баги...

Ставьте лайки и подписывайтесь на соц. сети

Discord: https://discord.gg/fv2c8PG5

TG: https://t.me/rencongamesjng

VK: https://vk.com/renconjng

1111
14 комментариев

Такс.... Мысли по ходу чтения. Просто мысли.

АИ. Проблемы. Решения:
1.1 — Нужно понизить частоту срабатывания и, что важно, сделать начало нового такта случайно генерируемым у каждого из мобов, иначе они все будут подстраиваться в один момент, что бросится в глаза.

1.2 — Возможно, как вариант, вокруг игрока расставить условные позиционные слоты с норм дистанцией, которые боты будут занимать по возможности. Если решите так делать, то привяжите блок с ними к игрока по координатам, но не по повороту, вращаться этому ни к чему. Именно к ним ближники и будут стремиться, а если те заняты... <см. пункт 2>

2 — Просто подарите ближникам слабую дальнюю атаку, скажем, бросок камня с земли, в случаи если они не могут добраться до игрока по тем или иным причинам, но видят его. Будут стоять чуть потдаль и накидывать немного. Заодно это сделать их не бесполезными, если игрок заберётся в какую-то недоступную им область.

Ещё можно добавить анимации выкриков и подначиваний союзников находящихся в ближнем бою.

3 — Нужна открывающая атака с разбега, которую бот делает при сближении с игроком. Лучше несколько её вариантов. Тогда вход бота в бой будет выглядеть естественнее и плавнее.

-

Уровень:

Если и делать генерацию в таком виде, то системе хорошо бы не комнаты ставить, а разные блоки внутри самих "комнат". Мол стойка регистрации такая или секая, овальная по центру или прямая сбоку, балкон А, Б или В, а точке h, f, или q. Ну и так далее. Естественно, разбитые на тематические/стилистически/биомные категории и узлы для переходов.

-

Оружие:

Большую часть модулей (не знаю почему «артефактов», это ж огнестрел, но вам виднее) имеет смысл сделать с какой-то одной функцией и лишь топовые и редкие с несколькими. Мало того, что это даст существенную разницу между ними, что улучшит ощущение прогресса, но и упростит обучение и запоминание на ранних этапах игры для новых игроков.

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

4
Ответить

Как только будет время, сделаем анимацию атаки с разбега для мобов.

Уровни будут генерироваться так - спавн пустых комнат разных размеров и потом в пустых комнатах спавнятся разные блоки комнат, как ты написал.

Модули это артефакты потому что они магические (чтобы не объяснять, как работают). Согласен, что стоит менять по 1-2 параметра максимум, ещё дать им говорящие имена, чтобы сразу запомнить. У одной пушки будет 3-5 слотов, чтобы модули суммировались мб сделать им ограниченное количество вставления/вытаскивания

1
Ответить

Проблемму с мобами рукопашниками можно решить проще. Они должны все двигаться лишь пока игрок на них смотрит. А когда камера игрока не направлена на них, то там двигаться может только 1-2 из них, (по этому принципу многие шутеры делаются) остальные пусть толпяться и не нападают.
Как решить какой моб будет атаковать? Да раздать им номерки. У кого первый тот и будет в спину игроку заходить.

1
Ответить

Я думал над тем, чтобы на игрока вешать счетчик, который показывает сколько врагов атакует сейчас и если больше N, то моб ждет. Моб атакует - прибавляем к счетчику, заканчивает атаковать - отнимаем.

Попробую отключать мобов, которые вне зоны видимости игрока, тут согласен. Делал спавнер врагов и примерно такую логику делал, чтобы он не спавнил их в зоне видимости.

Ответить

Зачем сильно замарачиваться с врагами милишниками?Просто на уровень к ним добавьте дальнобойных врагов,чтобы не было смысла убегать,дав игроку варианты разборки с ними,либо прятаться и отстреливать сначала дальних,но зато успеют набежать ближние,либо убить на расстоянии ближних,зато дальние тебя покрамсают
Насчёт оружия,вначале запутала тема с патронами 50/50 (150),зачем так усложнять?)ты итак изначально знаешь сколько патронов обойме,к чему писать 23 из 50?Это так,просто вроде нигде такого не встречал
А так удачи с проектом и сил довести всё до релиза!!!

1
Ответить

Количество патронов в обойме написали т.к. можно будет увеличивать размер обоймы.

Ответить

Удивительно как я сам последние дни думал о рогалике, и что хочу его сделать, и тут я нахожу этот блог. Я конечно совсем нубас в Анриале, поэтому буду скорее всего долго во всём копаться. Ну я пока один, ну и девушка Выфыксер)

1
Ответить