Как мы искусственный интеллект пилили
Всем доброго времени суток!
При разработке игры GumGuy, над которой работаем мы с командой, возникла необходимость в написании искусственного интеллекта для четырех боссов, которых в рамках разработки игр называют неигровыми персонажами (Non-player character). Это такие персонажи, которые управляются программой.
Нашей главной задачей было выбрать легкий в реализации и достаточно функциональный алгоритм. В настоящее время популярны машина состояний, или как еще ее называют конечный автомат, и дерево поведения.
Машина состояний хорошо подходит только для шаблонного и повторяющегося поведения.
Дерево поведения эффективно для выполнения большого количества действий с учетом различных условий, но требует больших затрат времени на реализацию.
Для босса обезьяны в GumGuy нужна была система, выполняющая действия одно за другим по заданному сценарию, и которую можно было создать достаточно быстро. Решением стало создание собственной системы. Язык программирования, на котором создана система и скрипты для уровня — C#, а движок для самой игры — Unity3D.
Схема действия системы команд следующая:
1) Каждая новая команда для выполнения наследуется от класса GameCommand и переопределяет методы Start и Update, отвечающие за инициализацию команды и за ее обновление;
2) Затем команды группируются с помощью объекта класса CommandsPacket, который регулирует последовательность их выполнения;
3) Созданные пакеты команд передаются объекту класса CommandsQueue. Этот класс отвечает за обновление пакетов команд и связывает созданную систему с движком Unity3D.
Вот некоторые из команд, которые используются на уровне с боссом этой игры:
— MonkeyGoTo — идти к заданной точке на этаже, чтобы потом выполнить какое-то другое действие;
MonkeyThrowBox — бросить ящик в направлении игрока, чтобы он мог уклониться от него;
MonkeyThrowBanana — бросить бананы в сторону, чтобы они пролетели сквозь боковые трубы к игроку, и он подпрыгнул, избежав столкновения;
MonkeyJump — подпрыгнуть на месте, чтобы сбросить ящики или балки вниз;
MonkeyFallBox — сбросить ящики при приземлении после прыжка;
— MonkeyClimbToFloor — лезть к заданному этажу, для выполнения других действий. В финальном варианте на фоне появится сетка, и обезьяна не будет лезть по воздуху.
Скриншоты были сделаны специально для этой статьи с целью демонстрации действий босса и не содержат финальную версию текстур и полную красоту уровней.
Рассмотрим преимущества и недостатки созданной системы
Преимущества:
— Не обязательно создавать состояния для контролируемого объекта
— Система быстро интегрируется в проект
— Созданные команды можно использовать повторно
— Есть возможность приостанавливать выполнение пакета команд
— Можно создавать новые пакеты команд в процессе игры и добавлять их на выполнение
Недостатки:
— Недостаточная гибкость при изменении условий с необходимостью выполнения другого набора команд (текущий пакет просто приостанавливается, даже если он уже не нужен)
— Рост количества объектов для одной команды при использовании различных входных данных
— Часто метод Start команды остается пустым
Созданная система позволяет с легкостью конструировать насыщенные и динамичные сцены, использовать повторно созданные команды и применять их не только к неигровым персонажам, но и к другим объектам на сцене. Благодаря этому построен целый игровой уровень в реальном проекте.
Надеемся, что наша статья станет кому-то полезной!
Если у вас возникли какие-либо вопросы — пишите в комментарии и по мере своего онлайна буду на них отвечать.
- 11 июня 2016, 11:43
Сомневаюсь что человек, к-й не может толком оформить статью сможет сделать толковую игру.
Ну что же вы, хотя бы посмотрите сначала наш трейлер. Как раз и опишете, сильно ли утвердилось ваше мнение.
А где его смотреть то ваш трейлер? В статье вроде нету...
Можно посмотреть здесь же на gamin по ссылке http://gamin.me/games/gum-guy
Ясно. Не знаю как у гражданина AndreyMust19, а моё мнение насчёт бостолковой игры утвердилось.
В чём принципальное отличие от SuperMeatBoy? Какие новшества у вас? Какой смысл вообще было делать игру? Без подъёба, мне просто интересно на что вы рассчитываете.
Раз всё сообщество gamin ополчилось против наших первых попыток в геймдеве, думаю бессмысленно мне что-то пытаться доказывать. Прошу в таком случае указать на очевидные недостатки, кроме сходства с митбоем, и может на хоть что-то хорошее, что вам могло понравится.
Вот это да! Приятно осознавать себя "всем gamin-ом" который ополчился на бедных новичков.
Во-первых, если это ваши первые попытки в геймдеве то нахрена вы лезете в гринлайт? Вы думаете, что ваш проект настолько гениален что ему нет альтернатив, что он обладает уникальной фишкой? Где же она? На самом деле ваш проект - среднестатистический шлак. Здорово, что вы его делаете, в качестве практики для разработки всё замечательно. Проблема в том что вы просите проголсовать на гринлайте чтобы попросить за него денег. Именно на это ополчилось сообщество gamin-а. А так, у каждого разработчика полно говнопроектов(даже у меня) но это не повод пытаться толкать и продавать все подряд. Нужно делать-делать-делать и выбирать из этого лучшее.
Во-вторых, по поводу недочётов.
Геймплей скучен и потому что похож на митбоя где вся механика движения отлажена до пикселей. Но и потому что у вас слишком тривиальные игровые элементы. Шипы, пилы, дрели, электричество, пушки. По статистике 98% используют этот набор. А что-то другое придумать?
Визуально игра не выглядит стильно. А выглядит как будто сделано неумехами. Нет контраста. Нет деталей, которые оживли бы игру. То есть вы заполняете уровни только игровыми элементами, в то время как следовало бы сделать несколько спрайтов незначащих объектов и расставить их по уровням в согласии со своим художественным вкусом.
Очень мало анимаций. У главного героя всего два спрайта - прыжок и зацеп за стену... добро пожаловать в 80-е. Можно было бы сделать чтоб он оставлял какой-то след чернильный, раз он блоб, как я понимаю. Чтоб на стенах оставалсь слизь после него. Такие мелочи в эффектах добавляют живость игре. А у вашего проекта единственный шанс - обзавестись живостью и атмосферой.
P.S. А вообще на этом сайте не ваша целевая аудитория. Большинство ополченцев - игроки со стажем в несколько(десятков) лет. Так что как и я многие видели МНОГО, ОЧЕНЬ МНОГО проектов, похожих на SuperMeatBoy. Как ты думаешь, какое у нас может быть отношение к ЕЩЁ ОДНОМУ подобному проекту, учитывая что в такого роде игрулины мы наигрались несколько лет назад, а ничего нового вы нам не показали. То-то же!
На счёт "всего gamin-а", то это все комментарии под этой статьей, включая администратора группы ВКонтакте. Всё же, спасибо большое, что уделили внимание написанию столь подробного и конструктивного комментария. Он самый исчерпывающий и полезный из всех написанных под этой статьей.
Ты дебил тупой идиот с на*** угробленными мозгами. Автор даже не пытается протащить игру через гринлайт. Он просто рассказывает про то как он пилил ИИ для боссов.
Ты чего ругаешься? Вообще-то они лезут в гринлайт.
Только один вопрос: а ты бы не полез? Вспомни себя и свои первые проекты.
Ну он же цель ставил, в основном, не заявить об этом, а понаписать грубостей, чтобы их отсюда спугнуть. Чего и добился.
Тем не менее. Тут ведь не абстрактное типа "ваша игра скучная, затянутая, серая, дропнул через пять минут". Тут конкретная идея "если игра не супер-пупер, не стоит идти в коммерцию".
И интересно, а эту идею Хейз на себя самого примерял? Не жмет она ему?
Ну в 14 лет когда я начинал заниматься геймдевом может и полез бы. Но даже тогда я понимал что качество моих проектов непродаваемо. А учитывая, что я ещё делал игры на мегамэновскую тему - я отдавал себе отчёт в том, что пиздить чужие идеи и продавать - скверная идея. Поэтому сунуться в коммерцию я попытался только с двадцатого своего проекта (TowerBombarde) и то мне сказали что графон убогий.
Так вот это меняет всю интонацию. Мог бы написать что-то в духе: я в свои молодые годы тоже делал трешак, пытался с ним в коммерцию и понял, что зря пытался. Так что и вам не советую.
Совсем другое отношение было бы к совету, мне кажется.
Это не было советом, это было целенаправленное хамство.
Я тут тоже написал нелестное мнение, но сделал это корректно. Кроме того, игра действительно вторична, выглядит, как не динамичный клон Митбоя (судя по видео).
Нет. Я считаю, что это совсем не тот случай. Я ведь сперва со своими поделками даже не пытался. Понимал что они стрёмные. Я же видел какие игры в те времена продавались.
А вообще я делал акцент не на стрёмности проекта, а на количестве опыта. Обычно ведь разработчик сперва тренируется, осваивает инструментарий на простеньких проектах. Хорошо - пускай осваивает. Но вот пытаться на этом заработать - бред на мой вкус. Про то и имел в виду: коли новичок - нафиг соваться в коммерцию со своими примитивными идеями. Я то сунулся в коммерцию уже после того как закончился мой период "подражания" и когда я уже сам начал что-то придумывать и делать.
Это особенность любого сообщества разработчиков, привыкай. Как пауки в банке. Если есть повод тебя пнуть, тебя пнут два раза. Если нет повода тебя пнуть, тебя пнут один раз. Запиши и повесь на стену. :)
По крайней мере я других сообществ не встречал. И это не зависит от того, новичок ты или долгожитель.
Кстати это напутстсвие может показаться агрессивным, но СБ в данном случае облёк в словесную форму то, что он наблюдал последние 5-10 (15?) лет в инете, и я наблюдал то же самое. Сообщества это жесть. Ну может кроме Коленки.
Ты дебил тупой идиот с на*** угробленными мозгами. Автор даже не пытается протащить игру через гринлайт. Он просто рассказывает про то как он пилил ИИ для боссов.
Нет, Хейз не идиот. Ему просто делать нехер было. Но зачем писать этот коммент два раза?
Разве? По этому пункту есть некоторые сомнения. По пункту "делать нехер" возражений нет.
Фигурально - случается. Психологически - нет.
Наверное, чтобы в теме было БОЛЬШЕ ЯРРРРРРОООСТИ!
Я чёт в этой статье никаких скриншотов не вижу (или они невидимые?).
Посмотрите, пожалуйста, еще раз. Теперь должны быть видны.
Очередной рекламопост. Ну тут автор хотя бы не стал проставлять какой-нибудь удивительный тэг не соотносящийся с содержанием поста.
За отсутствие скринов и присутствие дурацкой зелёной кнопки в конце поста дарю свою лопату.
Здравствуйте!
Подскажите, теперь картинки видны?
По какой-то причине gamin не принимал картинки с указанного мною сервиса.
Довольно унылая вторичная игра, судя по видео.
Так получается вместо интеллекта вы просто заскриптовали поведение боссов: вместо точек выбора перехода в конечном автомате, у вас фиксированная очередь операций. Для босса - самое оно. Но интеллектом это нельзя назвать, это сценарий.
Заглянул на Гринлайт, проголосовать рука не поднялась — увы, сплошные заимствования (Meatboy, Gish) и ничего уникального. Не хватает фишки, за которую зацепиться. Ещё один платформер с попрыгушками. :( Использовать проверенные решения, это хорошо, но что-то нужно добавлять в механику и своего, а то чужой суп получается.