22

Продолжение поста «Дневник разработки игры "Numbers: A Chain Match Game"»

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

--- Общее.

Сделано за пол года:

1. Добавлены новые достижения,  нарисованы и добавлены иконки для каждого.

2. Добавил firebase для сбора статистики, прописал кастомные события такие как конец уровня, теперь понятно на каком уровне игрок закончил игру и по какой причине, будь то рестарт или проигрыш.

Надо еще сделать:

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


--- Геймплей.

Сделано за пол года:

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


Работа подсказок на видео ниже:

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

Надо еще сделать:

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

Планы после релиза:

1. Для режима "Лимит времени" кнопку +1 минута с кд 30 минут за просмотр видео рекламы решил перенести на после релиза, так как не хочется опять лезть в тот кусок кода, абы ничего не сломать как обычно.

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


--- Графика и анимации.

Сделано за пол года:

1. Полностью нарисовано 7 локаций из 11, самый затратный по времени пункт, который и занял большую часть времени за прошедшие пол года. На оставшиеся последние нужно еще месяца два или три.

2. Добавлено освещение, и это одно из глобальных изменений, которое кардинально влияет на картинку. Скриншот до и после:

Освещение сильно повлияло на производительность, после его добавления мой телефон (Samsung a71) стал показывать 15-18 кадров и неистово греться, хотя до этого было 60 FPS. Проблема была в том, что на уровне было 7 источников света направленного и еще 7 как текстуры ламп, и некоторый свет был для нескольких разных слоев и все источники были с включенными тенями, хотя тени используются только в начале игры в 1 месте.


В первую очередь я убрал все настройки теней у каждого источника света и включил светить только на один слой по умолчанию. Убрал весь свет, который был текстурами ламп, вместо него оставил просто текстуру, для лучшего вида поставил материал на который не влияет направленный свет, а для имитации включения-выключения света стал менять прозрачность текстуры.  Все это помогло, игра осталась выглядеть точно также, но agc на телефоне вернулся к 60 кадрам, а unity показывает на пк 750 кадров против 470 до правок.


Была еще проблема, когда свет из уровня светил на UI, особенно было заметно во время паузы. Это решается переключение рендера на канвасе на Screen Space - Overlay, но тогда перестают правильно работать подсказки, они не выносят над серым фоном объект подсказки. Поэтому рендер оставил Screen Space - Camera, а UI вынес на отдельный слой, на который не попадает свет.


Пробовал еще добавлять нормалмапы для текстур для создания объема от света, но это не для пиксель арта, все стало выглядеть намного хуже чем было нарисовано :)


Надо еще сделать:

1. Дорисовать 4 уровня.

2. Нарисовать фон для меню.


--- Музыка.

Сделано за пол года:

1. Добавил звуки при соединении цифр и при атаках босса или ноля.

2. Добавил 9 фоновых мелодий, общей продолжительностью 22 минуты. Из-за того, что чем выше уровень, тем больше времени он занимает было решено отказаться от одной мелодии под каждый уровень, слушать одно и тоже больше часа было невыносимо. Сейчас при старте игры аудиоменеджер перемешивает все мелодии и играет их в случайном порядке, а когда мелодии заканчиваются перемешивает еще раз и так пока не надоест. Таким образом одна мелодия не надоедает и нет эффекта когда вы уже помните какой трек за каким играет и ждете его в нужный момент.

Вот так выглядит этот кусок кода:

Надо еще сделать:

1. Исправить несколько мелодий, их концовку обрывает на доли секунд раньше нужного.


Сколько ушло времени и когда релиз?

С момента идеи и до начала беты прошло полтора года, думаю еще пол года до релиза точно пройдет.


Чтобы набрать аудиторию и фидбек было решено отправить заявку на участие в конкурсе инди разработчиков Indie Cup W’22, прием заявок еще открыт, а результаты будут в марте-апреле.


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


Всем спасибо за внимание, и за то, что прочитали до конца. Буду рад вашим комментариям и фидбеку по игре.

Показать полностью 3 2
14

Дневник разработки игры "Numbers: A Chain Match Game"

Приветствую, спустя год полуактивной разработки своей первой мобильной игры на Unity (звучит как проклятье всех новичков) я хочу поделиться с вами результатами. Игра еще находится в разработке для платформы Android, в стадии альфа теста.


Начиналось все с концепции:

Игра логическая, геймплей не привязан к времени, максимум к ходам, без необходимости в скорости реакции, с повышающейся сложностью, рандомно генерируемая, для игры 1 рукой в метро. Делаем поле 9*9 с рандомными цифрами 1-9, надо соединять цифры в порядке возрастания, типа 1_2_3 при соединении они суммируются, дают столько очков и пропадают, на их месте появляются новые рандомные цифры, почти как 3 в ряд, но только цифры и только по порядку. Можно делать игровое поле разных размеров.

Первый, полностью рабочий в плане геймплея, билд не имел интерфейса, только считал очки, игровое поле было 9*9. Все это выглядело как-то как на скриншоте ниже, по-хорошему можно было добавить тонну рекламы, заливать в маркет и пилить этот пост, но это не про меня ;)

Как все это работает?


Весь игровой процесс происходит в 1 сцене, в независимости от режима и размера поля, мне показалось так будет проще чем делать 10 сцен с локациями под каждый режим и передавать данные между ними. Поле представлено матрицей размером 5*5, 7*7 или 9*9. Когда мы жмем на цифру то запоминаем ее значение и ставим ее как начальную точку отсчета последовательности, далее при свайпе (не отпуская палец от экрана) мы кидаем рейкаст каждый кадр по положению пальца на экране. Если под пальцем нужная цифра (ее тег больше на 1 чем первой выбранной цифры), то сохраняем ее в последовательность и продолжаем кидать рейкасты уже с ее позиции и сверяя с ее тегом.


Это повторяется пока мы не отпустим палец от экрана или не соберем всю последовательность 1-9, дальше начинается магия под названием "конец хода".


Конец хода запускает функции в таком порядке:

1. Подсчет очков и урона. Очки считаем по формуле количество собранных цифр * ширину игрового поля * и еще раз на ширину. Так получается, что собирать более длинные последовательности "выгоднее" по очкам, также как и играть на поле большего размера. Возможно эту формулу нужно будет балансить еще.

2. Проверка на конец уровня.

2. Включение анимаций удаления цифр.

3. Удаление собранных цифр с поля.

4. Заполнение пустых ячеек цифрами, которые были выше в этом столбце, как водопад.

5. Заполняем пустые ячейки новыми цифрами. Для этого проверяем поле на количество всех цифр, возвращаем массив с цифрами, которых согласно правил мало на поле. Из этого массива рандомно выбираем одну цифру и заполняем пустую ячейку. Повторяем проверку и заполнение пока поле не будет полным.

6. Сохраняем поле.

7. При новом тапе на экран проверяем есть ли возможные ходы, и если нет - конец игры. Ходов нет, когда на поле не осталось четных или нечетных цифр полностью, например, для поля 5*5 концом игры будет наличие на поле только цифр 1, 3, 5 или 2, 4.


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


А дальше?


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

Была придумана история, что наш персонаж - цифра ноль, и он будет драться с разными электрическими приборами (например, первый босс - калькулятор) чтобы спасти другие цифры из воображаемого плена. Всего в игре сейчас 10 локаций и 8 боссов.


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


Что сейчас сделано в игре, и почему это Альфа версия?


Для начала пару скриншотов текущей версии игры для понимания написанного ниже:

Все в игре делаю сам, включая графику, анимации и планируемые звуки и музыку, мой опыт достаточно маленький. Первый мой опыт работы с Unity, а кодил на С# по минимуму пару лет, ничего сложнее пицца-калькулятора не делал. Опыта в рисовании векторной или пиксельной графики тоже минимум, остановился на пиксельной, казалось, что легче - я ошибался, уместить все детали в 32 или 64 пикселя достаточно сложно не имея опыта и главное практики. Ну и с музыкой вообще беда, не понимаю ничего, думаю меня хватит максимум на звуки. Ниже собрал чеклист что сделано / не сделано, для оценки текущего состояния проекта.


--- Общее.

Сделано:

1. Локализация на три языка, русский, английский, украинский, думаю к релизу будут основные европейские языки, текста в игре все равно мало.

2. Локальное сохранение прогресса для двух режимов одновременно, с кодированием данных от мамкиных хакеров.

3. Подключены Google Play сервисы, с достижениями, рейтингами игроков и облачным сохранением.

4. Самое любимое в сообществе - наличие рекламы. Да, она есть, но так как меня она тоже напрягает (особенно внезапный баннер), то ее здесь минимум, и она не мешает игровому процессу. Добавлен 1 баннер внизу экрана, только во время паузы, 1 видео реклама за обновление игрового поля (по желанию), видео реклама +3 к подсказкам, доступно неограниченное количество раз (по желанию).

Надо еще сделать:

1. Прописать больше достижений.

2. Возможно добавлю Аналитику и события, для сбора статистики.



--- Геймплей.

Сделано:

1. Два режима игры, обычный и с лимитом времени.

2. Три разных размера поля 5, 7 и 9 клеток.

3. Смена уровней, смена боссов и скина главного персонажа.

4. При смене уровня перемешивание текущего поля, не добавляя новые цифры.

5. Атаки и оружие персонажа и боссов.

6. Функция поиска хода, 3 попытки. Оказалась самым сложным решением в плане кода как для новичка. Этот метод ищет все возможные последовательности для каждой цифры на поле. Сначала в большую сторону от цифры, потом в меньшую. Образно для цифры 3 сначала находим 4 и 5, а потом 2 и 1. Все найденные последовательности сравниваются по длине и среди самых длинных рандомно выбирается одна, которая и будет показана игроку. Дополнительные попытки доступны за просмотр рекламы, +3 за просмотр.

7. Функция обновления игрового поля, когда закончились возможные ходы. Такой себе софт старт игры заново, но с сохранением всего прогресса. Доступно 1 раз за игру, и при желании только 1 раз за рекламу.

Надо еще сделать:

1. Обучение в начале новой игры.

2. Баланс сложности для полей размером 7 и 9, сейчас на них банально сложнее проиграть.

3. Баланс накопления времени в режиме игры "Лимит времени".

4. Возможно добавлю для режима "Лимит времени" кнопки +1 минута с кд 30 минут за просмотр видео рекламы.

Планы после релиза:

1. Режим игры "Выживание", где атаки босса будут также снимать здоровье у персонажа, на поле будут "сердечки" при соединении которых будет восстанавливаться хп.



--- Графика и анимации.

Сделано:

1. Нарисован весь интерфейс, спрайты и анимации всех цифр, главного персонажа и всех боссов. Персонажа и боссов сначала делал в MagicaVoxel и потом готовые модели использовал как референс для спрайтов и анимаций.

2. Уровни нарисованы схематически, для понимания общей картины.

3. Нарисован собственный пиксельный шрифт для текста.

Надо еще сделать:

1. Полностью нарисовать уровни.

2. Добавить анимации некоторым предметам окружения.

3. Добавить освещение на уровни.



--- Музыка.

Сделано:

1. Сделан аудиоменеджер с возможностью регулировок громкости из меню настроек.

2. Добавлена тестовая фоновая мелодия, будет заменена к релизу.

Надо еще сделать:

1. Сделать и добавить звуки для атак, объединения цифр.

2. Добавить фоновую музыку, желательно мелодию для каждого уровня.



Сколько ушло времени и когда релиз?


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


По моим подсчетам на оставшуюся работу по графике и анимациям уйдет еще месяца 4.

На звуки пол месяца, на музыку, если писать самому даже простые мелодии (а их надо 10) то это еще месяца 2-3, если найти и просто добавить то два дня максимум.

На балансные правки и проверку один месяц.

На исправление багов около месяца, половину уже поймал и исправил.

На подготовку к публикации еще 1-2 месяца, что включает все маркетинговые тексты, скриншоты, видео для маркета, и перевод всего этого минимум на 3 языка.


Итого имеем, что надо еще минимум 7,5 месяцев максимум 11 месяцев. Это если укладываться в прописанные сроки и не возникнет новых проблем.


Зачем я все это вам пишу?


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


Для доступа к закрытому альфа тестированию нужно вступить в Google группу тестировщиков и подтвердить желание учувствовать в тестировании на этой странице, ну и собственно скачать саму игру в маркете на свой Android девайс.


Всем спасибо за внимание, и за то, что прочитали это полотно до конца. Буду рад вашим комментариям и фидбеку по игре. До встречи в рейтинге топ игроков.

Показать полностью 6
Отличная работа, все прочитано!