Привет, Пикабу! Тут, в попытках завоевать расположение, можно было бы рассказать, как давно я здесь в режим ридонли. Но Хочу поделиться своим опытом разработки и публикации свой Web-игры.
Об идее:
Идея возникла ещё в эпоху флеш-игр, когда я играл в какую-то казуальную игру, основная идея которой заключалась в уравновешивании чаш весов с заданной точностью, при помощи создания объектов нужной массы.
Кстати, нашел на эмуляторе эту игру, вот она:
Тогда мне захотелось придумать что-то своё и я подумал, почему бы не сделать аналогичную игру, но где нужно смешивать цвета, чтобы получить нужный?!
С того момента прошлого много лет и вот у меня появилось свободное время и желание заняться геймдевом. Что из этого вышло, я расскажу ниже.
Когда-то давно, в студенчестве я уже пробовал написать свою игру на Unity под Android. Я написал небольшую игру про оборону дома от зомби, выпустил её и.... получил 5 установок(одна из которых моя собственная).
Поэтому выбор игрового движка был очевиден, хоть и уверен, что получившуюся игру несложно реализовать на чистом HTML/JS.
Забегая вперед, игра выглядит как-то так:
Про сравнение цветов
До момента создания игры я ничего не знал про сравнение цветов в RGB пространстве, поэтому первая идея, которая пришла мне в голову – это находить расстояние между двумя точками в координатах RGB. Но чем больше я погружался в вопрос, тем отчетливей начинал понимать, что такой подход неверен. Так я пришел к тому, что стоит использовать формулу цветового отличия.
Если кратко: то RGB напрямую никто не сравнивает, а переводят в цветовое пространство Lab, а затем уже сравнивают по формулам, что есть по ссылке выше.
Разработка
Выбрав Юнити я в том числе надеялся, на то, что смогу быстро вспомнить всё, что о нем знаю и начать разработку. В реальности пришлось всё учить чуть ли не заново.
У меня было несколько идей геймплея игры, одна из них был в том, чтобы сделать раннер, где чтобы пройти на следующий участок нужно подобрать правильный цвет. Но в итоге я остановился на том, что наверху экрана должны генерироваться шарики-цели разных цветов, а внизу, смешивая Красный, Зеленый, Синий цвета нужно получать такой же цвет, как у цели и выбить её.
Для постепенного усложнения игры я решил вначале генерировать простые цвета, которые можно получить передвинув один или два ползунка в крайние положения.
Сами цвета я объявил в массиве и обращался к ним, пока количество очков не превышало заданного значения. Далее все примеры кода будут на C#.
Попытался вместо картинки использовать код с markdown, но не получилось
После нескольких тысяч очков начиналась абсолютно случайная генерация цветов, где уже приходится подумать, как смешать цвета, чтобы получить нужный. Это всё усложняется ещё тем, что по ходу набора очков увеличивается необходимая точность, которую нужно достичь при подборе, и скорость шариков, которые надвигаются.
Чтобы мой проект совсем стал похож на полноценную игру, я решил добавить игровые достижения. Достижения решил хранить локально, на устройствах игроков, чтобы избежать сетевых запросов да и упростить разработку.
Для сохранения использовал метод PlayerPrefs, что предлагает сам движок.
Пример записи одного из достижений PlayerPrefs.SetInt(Constants.FIRST_STEP, 1);
Затем встал вопрос, как показать, что достижение получено и не получено. Его я решил следующим образом: при переходе на экран достижений проверятся, есть ли в хранилище запись о достижении, если есть, то у объекта меняется спрайт с черно-белого на цветной.
Сам экран получился таким:
Так постепенно я писал игру, каждый день приходила очередная идея того, как улучшить или добавить дополнительные функционал в игре, но в какой-то момент я понял, что если всё реализовывать, то можно никогда не дойти до релиза. Поэтому я решил дать поиграть в то, что получилось своим друзьям, получить обратную связь и пробовать выпустить игру. Чтобы проще было делиться с друзьями игрой я арендовал самый дешевый VPS сервер, куда периодически заливал игру, чтобы её можно было запустить с любого устройства у которого есть браузер и доступ к интернету. Обратная связь от друзей оказалось очень полезной штукой, т.к. некоторые вещи, которые мне казались очевидными, было вовсе не такими, например: что смешав Красный и Зеленый мы получим Жёлтый. Поэтому я решил добавить окно с обучением.
Окно показывалось один раз при первой игре, затем я сохранял в настройках, что окно было просмотрено и больше его не показывал, чтобы оно не надоедало
Публикация
Игрой я решил поделиться на каких-нибудь популярных площадках и заработать миллионы на доширак. Пока игру опубликовал только в Яндекс.Играх, прикрутив рекламу от самой платформы.
По поводу рекламы: поиграв пару десятков игр в Я.Играх, я обратил внимание, что многие размещают рекламу прямо со старта игры. Предполагаю, что делается это, не ожидая, что игру запустят второй раз, наверное. Я решил так не делать и проверять, если пользователь запускает игру в первый раз, то на старте рекламу не показывать, если же почему-то он запустил игру во второй раз, то уже появляется реклама
Когда не показываешь рекламу при первом запуске
Вот таким получился мой опыт написания игры. Не успел рассказать про локализацию на разных языки на Unity, но пост итак уже разросся.
Буду рад ответить на вопросы!
Если будет интересно, то игру назвал "Ловец цвета", а поиграть её можно здесь