Как я в одиночку сделал игру за два месяца

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

Как выснилось, никаких особых дарований не нужно. Достаточно скачать движок Unreal Engine 4 и вбить в закладки волшебное слово Mixamo. Надо признать, некоторый бэкграунд у меня все же был. Свой путь в IT я начинал с самодельного компьютера "Радио 86 РК" и не знал ничего, кроме ассемблера. В те времена неоспоримым хитом была "Змейка", нарисованная ASCII символами в алфавитно-цифровом режиме. Вариант для "Радио 86 РК" назывался "Питон". Понятия "игровой движок" не существовало вовсе. С тех пор, как стандартом де факто стала IBM PC, я по уши погряз в Delphi, но занимался исключительно базами данных. Тем не менее, существовала такая библиотека "Delphi-X", позволявшая оперировать такими понятиями как "спрайт" и "коллизия". Как то раз для разминки я сделал римейк "Питона" под Windows на Delphi, и на этом весь прежний опыт игростроения закончился.

Короче, всю жизнь прожил программистом, но программированием игр почти не занимался. Сейчас жалею, что не узнал об Unreal Engine с самого начала. Объекты, наследование, свойства и события - это все мое родное и любимое. Симуляция физики и базовые элементы ИИ - прямо из коробки. Плюс море доступного контента, сочетающего в себе два взаимоисключающих свойства: бесплатность и высокое качество. Пройти мимо я не мог. Надо было обязательно что-то сделать.

Хотелось сделать нечто, обладающее всеми свойствами конечного продукта, и вовсе не хотелось, чтоб за версту разило махровой индюшатиной. Цель вполне достижимая, если найти простую идею, под которую существует уже готовый набор материала. Концепт мне подкинул Fallout 76, там есть такая пасхалка: летит робоглаз и играет мелодию, а следом бежит стая крыс. Я сразу вспомнил про "Питона" и понял, что делать. Алгоритм берем от старой доброй "Змейки", но вместо головы движется Player Character, играющий на дудочке, а тело змеи - это вереница мышей, собираемых с локации.

В старые времена был такой мультик про мальчика Нильса, который так же собирал за собой мышей, и в Миксамо быстро нашелся подходящий аналог: персонаж AJ. Мыши так же были в наличии, а анимации легко переносились с других мешей. Одна беда - не было такой походки, когда персонаж идет и одновременно играет на дудочке. А среди бесплатных моделей и дудочки приличной не нашлось. Зато нашлась труба, а это даже красивее. Пришлось призвать на помощь Майку с ее инструментом "Edit Region Key". Взял подходящую походку и повернул правую руку в нужное положение.

Получилась анимированная меш главного героя.
Получилась анимированная меш главного героя.

Для создания окружающей обстановки вполне хватило элементов, входящих в Mobile Starter Content. Из готовых ассетов использовались только куст и камень, все остальное сделано комбинацией геометрических примитивов: куб, сфера, цилиндр, конус. Объединял в группы и копипастил. Сделал даже некое подобие реального "Дома Крысолова", главной достопримечательности города Гамельн.

Если что, реальный "Дом Крысолова" слева.
Если что, реальный "Дом Крысолова" слева.

Может я немного погрешил от исторической истины, но в общий сеттинг вписалось нормально. Опять же, сделано быстро и бесплатно.

Сколько всего получилось полигонов - даже не интересовался, но за основу взят именно Mobile Starter Content, а проект предназначался под десктоп.

Максимальное количество мышей я ограничил цифрой 300, хотя судя по всему, до ограничения по производительности еще далеко. Тестировал на Core I3 с бюджетной видеокартой - никаких тормозов вообще.

Второй месяц ушел на модификацию игровой механики. При всей гениальности концепт "Змейки" имеет свои недостатки. Пока хвост короткий, игроку скучно ползать по пустому полю, но чем дальше, тем более рутинным оказывается процесс накручивания петель для поджимания хвоста. Хотелось добавить некую "живинку", чтоб не было тупого копирования алгоритма.

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

Когда длина хвоста достигает 300, открываются ворота и главный герой может выйти наружу. Игроку предоставлен выбор: или утопить всех в реке, или отпустить гулять в лесу.

Игруха теперь лежит на itch.com, демонстрация геймплея записана на видео:

Там целых 5 минут, короче никак не получилось.
6565
38 комментариев

Вот так учишься геймдизайну, книжки всякие читаешь, затем изучаешь Unity, потом прогать учишься, потом Blender, моделлинг, риггинг, скиннинг, анимация, потом в шейдеры с головой закапываешься, потом ещё много чего сверху, а оказывается

никаких особых дарований не нужно. Достаточно скачать движок Unreal Engine 4 и вбить в закладки волшебное слово Mixamo.

Я, походу, 10 лет назад не тот движок скачал просто...

22

Ну это такая общая тенденция, которая бесит очень многих. Все делается так, чтоб можно было какие-то интересные вещи делать. не особо вникая вглубь. В результате на коне оказываются люди, которые просто где-то как то верхушек насшибали. А тот, кто копал до самых корней остается аутсайдером. Но это отдельная и очень философская тема. Тот или не тот движок - зависит от поставленной цели. У Unity, и у игр для мобилок есть очень серьезное преимущество перед Анрилом. Это возможности монетизации. Рынок мобилок шире, и для мобилки купить игру проще, чем украсть. Потому на  Unity намного проще заработать денег. Но кодить и дизайнить сложнее. Вполне естественная взаимозависимость свойств. Другое дело, на мобилках железо все более мощное, а потому и игры все более десктопообразные. Если смотреть на тренды, дело кончится тем, что для мобилок тоже будут делать игры на Анриле, а та проблема, что они будут тяжелее как по объему, так и по процессору будет решена за счет пользователя - его просто заставят купить себе новую мобилу, которая будет запросто пережевывать гигабайты.
10 лет назад у Unity не было альтернативы. А опыт работы под мобилки не пропьеш. Я тоже 10 лет назад много чего такого делал, о чем нынче жалею. Знать бы, где упадешь, так можно было соломки подстелить. . .

7

"Особых дарований не нужно" - это тоже сарказм с моей стороны. В результате мы друг друга не поняли.

Да, именно гусеницу опричную он и созывает.

3

А как реализован хвост? Как мыши друг за другом следуют?

Мышами управляет встроенный в Анрил ИИ. На сцену поставлен NavMeshBoundsVolume, каждый тик работает нода Simple Move To Location. У каждой мыши есть переменная TargetActor, в которую записана ссылка на впереди идущую мышь. От TargetActor берем GetActorLocation и передаем в параметр Goal. Для самой первой мыши в TargetActor записан PlayerCharacter. Каждая новая мышь пристраивается за главным героем, а бывшая первая становится второй. В ее TargetActor записывается вновь пойманная мышь, все остальные переменные остаются прежними. Меши персонажей настроены NoCollision, но капсулы блокируют все, кроме Pawn. За счет этого очередь может прошивать сама себя, и змейка способна к самораспутыванию. Дистанция между мышами регулируется изменением диаметра капсулы.

4

Сорян, но это никак нельзя назвать игрой. Просто демонстрация некой зачаточной геймплейной механики. 

1