Я сделал свою первую игру. И про "ужасных" модераторов Яндекс Игр.
Хочу поделиться с вами радостью. Готов мой первый законченный и опубликованный проект!
Предыстория
С Юнити я ковырялся давно. Пытался разобраться сам, переводил обучающие материалы и, возможно, кто-то из вас даже их видел. Миллионов просмотров не набрал, но судя по комментам сделал полезное дело)
Учится сейчас по этим роликам не рекомендую, потому как за 5 лет много в Юнити поменялось и будет много не соответствующего последним версиям редактора. Но по С# там все еще актуально и можно полезное найти.
И вот, на работе все немного устаканилось с инфраструктурой и появилось то самое свободное время! Насмотревшись роликов об успешном успехе ЯндексИгрРазработчиков тоже решил тряхнуть стариной и запилить свою игру. Потрачено около месяца (немного на работе, немного по вечерам и в выхи).
Дед, зачем тебе это?
Разберем цели проекта и посмотрим достигнуты ли они:
1. Довести хоть один проект до логического завершения. Выполнено.
2. Вспомнить C#, вспомнить способы взаимодействия объектов, вспомнить работу с массивами. Выполнено.
3. Снова попытаться разобраться с поворотами объектов в 3Д пространстве. Выполнено частично. Да, я могу использовать готовые куски кода из тырнета и они даже работают, но написать что-то толковое без шпаргалок и объяснить как это работает пока нет.
4. Попробовать поработать с СДК Яндекса. Вроде выполнено. Для следующего проекта интересовала отправка данных игрока и сохранение процесса.
5. Посмотреть на сколько сложно делать локализацию. Не сложно. Я не про сам перевод, а как это в движке реализовать. Ниже покажу у кого научиться.
6. Попытаться пройти страшную и ужасную модерацию Яндекса. Выполнено.
5. Заработать 100500 деняг. Провалено.
Какие подводные?
Я изначально делал по принципу MobileFirst но, чтобы при этом на ПК тоже все работало исправно. Около недели потратил на управление (перетаскивание предметов в 3Д пространстве) пытаясь дублировать OnMouseDown() для ПК и Input.GetTouch для мобилок. Оказалось, в 2022 или в 2023 юнитисты уже успешно реализовали и то и другое для веба в OnMouseDown(). Да, этот метод(и его товарищи) одинаково хорошо обрабатывают одиночные касания и мышей и пальцем. Но если вам нужен будет свайп или увеличение изображения раздвиганием пальцев например, то к Touch все таки придется обратиться.
Достаточно долго ковырялся с массивами. Интересной задачей оказалось написать код для заполнения массива случайными неповторяющимися целыми числами из заданного диапазона. На первых 3х уровнях массивы предметов заполнены вручную а на 4-5 генерируются случайно.
В игре есть артефакты - пропсы с нестандартным поведением. Так вот создание каждого из них заняло по пол дня. Нужно будет учесть на будущее - каждое изменение механики = геморрой. Стараемся избегать)
Что по модерации Яндекс Игр?
Модерация от отправки до одобрения заняла меньше 2 суток. Нет, это не реклама от ЯИ) То, за что я больше всего переживал, оказалось намного проще.
Не знаю как так получилось. Возможно, именно благодаря тому, что я посмотрел кучу роликов от Инди Алеши и других о том, какой это ад, и хорошо подготовился. А может, и правда игра получилось достаточно качественной и за это ее быстрее одобрили ¯\_(ツ)_/¯
Игра отправлялась на модерацию в том виде, как сейчас около 15:00 среды. Около 20:00 среды уже пришел отказ с двумя замечаниями (появление музыкального плеера и невыдача подарка за просмотр рекламы). Про музыкальный плеер отдельно напишу, а про подарок - да, сам затупил и ошибся на единичку в одном месте. На следующий день все исправил и около 20:00 четверга (первый раз повторно можно отправить через сутки) зарядил еще раз. На Яндексе пишут, что ночью модерация не работает, но к 5:00 пятницы утра игра уже вышла в каталоге. Спасибо тебе, добрый модератор из Владивостока)
Советы бывалого
Что могу посоветовать? Главное, наверное, настойчивость и усидчивость. Тогда все получится. Выбирайте первый проект попроще. Да, 100500 миллионов деняг не заработаете, но у вас будет законченный проект (возможно для портфолио), радость от реализации, бесценный опыт.
Обязательно пользуйтесь графическими ассетами, даже если умеете рисовать. Создание графики увеличит срок реализации проекта в 2-4 раза. Покупать их или нет, тут уж каждый сам решит по совести.
Если хотите на Яндекс Игры то до начала работы над игрой хотя бы разок прочитайте их требования и посмотрите пару роликов на YouRuVKtube. Да, их достаточно много, но ничего особо сложного там нет. По большей части адекватные.
Чтобы заработать 100501 миллионов деняг, нужно сделать хорошую игру, в которую игроки захотят регулярно возвращаться в течении дня, недели, месяца. Это сложно. Сразу не замахивайтесь на эту цель, но держите эту мысль в голове и когда-нибудь возможно получиться придумать новый Матч4 или Махаджонг)
Где брал инфу?
Около 60% - ЗапреТуб, около 30% - документация, 10% - гугол и стак.
Кого я смотрел:
- про локализацию тут. Там под видео еще ссылка на сайт есть.
- про кирилицу в TextMeshPRO
- создание меню просто и быстро
- физика в юнити. Офигенно.
- корутины. Сложная тема, но тут неплохо рассказано
- из заморских CodeMonkey и Brakeys бывало. Но про Брекиса не забывайте, что там тоже уже некоторые данные устарели
- мотивация и дельные советы - Инди Алеша или Гришаков
Спасибо, если дочитали! Не знаю можно ли тут ссылку на свою игру давать, но если можно то добавлю)
Картина маслом шик
Добрый день. Поздравляем с первой публикацией на нашей платформе 🎉
Спасибо, что поделились своим опытом, желаем удачи и успехов проекту ❤️
Мда. Способ локализации просто ужасный. Особенно если сцену на префабы не дробить. Потому что каждый раз придётся вносить изменения в сцену для изменения текста. Да и сохранять текст в инспекторе мне кажется делом опасным. Он и пропасть может. Лучше уж тогда встроенным решение Unity пользоваться, чем подобные костыли писать. Для таких простых вещей его хватит. имхо
Я думал там будет Lean Localization, но все оказалось и правда очень плохо. Локализация как минимум должна стоять обособленно от игры, чтобы её можно было отдать переводчику и встроить в игру без проблем, а тут всё в одну кучу сложили. Я обычно, когда нужна локализация на скорую руку завожу enum с ключами локализации и enum для ключей языков и в коде делаю большой switch case на каждый случай и это мне кажется куда лучше, т.к. находится в одном месте и при необходимости можно заменить на любую библиотеку локализации. А тут, чтобы заменить все на полноценную библиотеку надо будет каждый объект прошерстить.
И еще помни, какой индекс у русского или англиского языков.
Комментарий недоступен
Как только насобираю деняг на команду как у CDPR)
Поворот объектов в 3d пространстве это надо курить комплексные числа.