Cerenville 54: как я сделал игру на выходных

Шароголовые спешат на драку
Шароголовые спешат на драку

Привет!

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

Важная информация: я не програмист, а геймдизайнер. Большая часть моих технических решений наверняка каличные, но они работают :)

В обновлении я добавил взрывную волну для регдоллов и эффект при попадании. По моим ощущениям стало ГОРАЗДО лучше

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

1. Можно лазить по дому, забираться на разные полочки

2. Есть три вида врагов, с которыми можно сражаться

3. Есть Крампус, с которым сражаться нельзя, но вот он может надавать по жопе при встрече

4. Есть два босса, которые на самом деле легко проходятся

5. Враги могут случайно убивать друг друга – честный огонь по своим. Самому себя завалить рекошетом тоже не сложно :)

6. Есть прокачка здоровья, автолечения и силы оружия

7. Есть небольшое количество пасхалок

Как устроен Крампус и какие функции он выполняет

С точки зрения гд Крампус - это постоянно перемещающийся источник опасности, на которого игрок не в силах повлиять. У Крампуса есть несколько точек интереса на карте, между которыми он курсирует в рандомном порядке. Его цель - осматривать местность и наносить урон игроку, если тот попался на глаза.

Нельзя попадаться Крампусу на глаза

Само движение сделано с помощью NavMesh Юнити и простого скрипта, который выдает рандомную цель из списка. На месте у Крампуса включается анимация оглядывания, в конце которой добавлено событие, вызывающее функцию обновления целей.

"Глаза" Крампуса - это луч из головы, который находит коллизию и перемещает в эту точку тонкий триггер-параллелепипед со своим тегом. Если ГГ считывает попадание в этот триггер, то получает урон. Я собираюсь переделать эту систему на Particle System, чтобы честнее учитывать препятствия, за которыми прячется игрок.

Враги

Есть три типа основных врагов: это шароголовые, гномы и черви-леденцы.

Самый часто выдаваемый - это гном. Гном имеет две точки интереса: это банка с душой и игрок, между которыми он курсирует. Таким образом без сложных решений он трется около цели игрока. Гном медленный, и наносит урон только при попадании ГГ в его триггер. Цель гнома - быть убитым игроком для развлечения.

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

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

Врагов спавнят специальные тостеры, каждый из которых может насчитывать до десяти таких детишек. Это сделано для ограничения их популяции, всё-таки мобильная платформа. На разных уровнях включены разные тостеры, чтобы разнообразить геймплей. А соотношение врагов примерно 1:8:1 в пользу гномов. Такой спавн сделан для того, чтобы логично размещать врагов в нужном мне месте, не нарушая погружения.

Отдельно хочется упомянуть, что Unity.AI сейчас не может обеспечить пути для агентов разных размеров и высоты. Так как мои враги очень разных размеров, я использовал "экспериментальный" пакет, который это умеет (а также может запекать карту на лету и другие фичи):

Эффекты и оптимизация

Игра сделана под Android, так что запас мулек был ограничен. Я использовал Lens Flare для эффекта бликов - очень рекомендую всем, у кого есть сложный свет, чтобы оживить сцену. У меня они добавлены к лампам, огню в камине, обогревателю и душам. Не забываем указать слои, которые игнорируются этим эффектом, иначе их работа может быть нарушена.

Lens Flare
Lens Flare

Весь свет, кроме света от камина, запечен вместе с Light Probes, таким образом в разных частях карты разная атмосфера. А для света от огня добавлен маленький скрипт, который не совсем равномерно меняет интенсивность (огонь же дает неравномерный свет, правда?).

Я максимально переиспользовал текстуры: например, из текстуры для ведра сделан еще и обогреватель, а также гвозди. Текстура дерева одна на все случаи жизни: пол, стены, полки, стеллажи. Таким образом я очень сильно сэкономил память.

Стоит отметить, что заметно оживить модели помогает карта Metalic, которая по альфе определяет, собственно, металик для части текстуры - это можно хорошо увидеть на керосиновых лампах.

Ведро!
Ведро!

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

Рэгдолл существует только для Шароголовых, у которых есть 10 секунд после смерти, после чего они исчезают. Это время я вывел путем проб: как правило этого хватает, чтобы тело красиво упало или улетело куда подальше.

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

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

Навигация

В игре есть навигация в лоб - это линия с наикратчайшим маршрутом в любой момент времени. Она сделана на Nav Mesh и отчаянно жрёт ресурсы :) Но это не всё, что подсказывает игроку, куда двигаться: над банками с душами есть сияние (тот же Lens Flare) синего (синий цвет у меня используется как раз для UI и навигации и не используется в ассетах), а пути, которые я хотел подсветить (например, под потолком), имеют жёлтый цвет.

Скрытая механика: когда игрок подбирает душу, начинается отсчет времени. Если не успеть отнести душу до его истечения, ты умрешь. Необходимость двигаться я показываю включением ритмичной музыки, а также в баночке за спиной ГГ душа со временем тускнеет и исчезает. Это небольшой прикол, который мало кто заметит, потому что времени на доставку в целом более чем достаточно.

Пасхалочки

В игре есть совсем немного пасхалок, но они есть: на уровне можно 2 раза улучшить здоровье, подобрав красную колбу, и два раза усилить оружие, подобрав камни золотого цвета. Также есть наглядный счетчик смертей гг - над столом можно найти гвоздь, на который насажены тела. Их количество ограничено, но вряд ли кто-то сможет погибнуть более 5 раз :) На шкафу хранится запасная голова Крампуса, а в дыре в стене можно увидеть тела, которые вставют, если спасти их душу. Также на одной из полок есть упаковка лекарства от тупости. Крампус может включить музыку, если подойдет к радио.

Итоги

Я сделал почти всё, что хотел, а также смог уместить игру в 45 мб - это даже на 5 мб меньше, чем я планировал. Игра вышла в Google Play, в ней пока нет рекламы, а планы - сделать в том же приложении уже игру побольше. Друзья поставили мне оценки, и вы тоже можете. А я пойду отдыхать, в этом году мои силы на пет-проекты официально всё.

Кстати! Если вам нужна озвучка или лого

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

Cerenville 54: как я сделал игру на выходных
4.5K4.5K показов
273273 открытия
9 комментариев

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

Ответить

Спасибо, хорошая идея, вперёд)

Ответить

Как успехи?

Ответить

а вообще довольно, забавно, удачи проекту

Ответить

Спасибо, но эта часть проекта - просто моя прихоть, и всё остальное будет выглядеть совсем иначе. А это значит, что какие-то обновления для секции с Крампусом будут только через год)

Ответить

ого, за выходные такую игру запилил, молодец

Ответить

Ну ладно, это были не одни выходные :D

Ответить