Изначально статья была написана в январе 2023
Думаю не стоит лишний раз напоминать о той обстановке, в которой мы живём последний год. Как только всё тогда началось, вновь пошли разговоры про импортозамещение и поддержку отечественного производителя, в том числе и в IT. Было очевидно, что в нашей стране за последние N лет в этом отношении было сделано немного, мягко говоря. Тем не менее, ещё не всё потеряно. :-)
Где-то полгода назад мне попалась (уже не помню как, через рекламу скорее всего) новость о запуске конкурса «Начни Игру», цель которого, насколько я понимаю, простимулировать интерес к геймдеву и в целом по итогам возможно нахантить талантливую молодёжь из числа участников. Хоть лично я никакого успеха на этом поприще не добился, но интерес к теме сохранил, поэтому чисто ради интереса решил посмотреть, что же это такое и насколько серьёзно к этому решили подойти.
После регистрации предоставляется возможность выбрать одно из трёх направлений: «Геймдизайнер», «Unity-разработчик» и просто «Дизайнер». На момент моей регистрации где-то в июле был доступен только один курс, «Геймдизайнер», поэтому сначала я записался туда, сделав вывод из описания на платформе, что потом можно будет в любой момент переключиться на другой при необходимости. Однако потом оказалось, что это невозможно, и пришлось регистрироваться с другой почты, чтобы записаться на другой курс.
Курс по геймдизайну я забросил, т.к. там присутствует довольно много заданий для расчётов в гугл таблицах, причём иногда ответ приходится подгонять из-за некорректной формулировки задания, поэтому далее буду описывать курс по разработке на Unity.
Тут хотелось бы сделать небольшое отступление, чтобы дать некий контекст происходящего, потому что мне кажется это тоже важно.
Игровой движок Unity3D уже давно не нуждается в представлении, поэтому, с одной стороны, у нас как всегда, всё делается с опозданием лет на 10, но, с другой стороны, я всегда был сторонником принципа «Лучше поздно чем никогда». Правда с годами я стал добавлять к этой поговорке ещё одно предложение: «Хотя всё же лучше всё делать вовремя». Ну или по крайней мере некоторые вещи. :-)
Поэтому попытка поднять интерес к разработке игр в 2022-м, вместо того, чтобы заниматься этим в 2010-м, например, выглядит, мягко говоря, запоздало, учитывая, что будущее самого геймдева нынче выглядит достаточно туманно: все жанры разработаны по максимуму, сделать что-то по-настоящему уникальное крайне сложно. Графон и так уже прокачан до предела. VR бум, в котором видели новый виток развития, вроде как тоже сошёл на нет.
Поэтому только и остаются, что triple A игры от крупных, зарекомендовавших себя компаний, с огромным миром, проработанными персонажами и/или крутым сюжетом (GTA 5, Red Dead Redemption 2), либо казуальные тупняки для телефона, чтобы убить время при проезде в общественном транспорте, с длиной игровой сессии не больше минуты, но тут все, кто хотел / смог, эту нишу уже давно заняли со времён того самого 2010-го. Да даже игры от крупных компаний не всегда выстреливают из-за разных причин. Наверное только ленивый не обращал внимание на зачастившие за последние лет 5 римейки, ремастеры и пр. Всё это похоже на симптомы какой-то болезни. И вот уже в забугорном ютубе нет-нет, да появляются ролики на тему «Is video game industry dying?» и тому подобное. Поскольку подобное уже было в истории, причём не так давно и народ помнит. Только тогда причины кризиса были другими, производственного, а не экзистенциального характера, и решение соответственно было другое.
А как мы будем выходить из кризиса в этот раз?
Вообще мне кажется это тема для отдельного исследования.
Но вернёмся к курсу на платформе.
После регистрации и поступления на курс, перед тобой открывается неплохо нарисованный roadmap, стилизованный под, понятное дело, карту некоего игрового мира со звёздочками, символизирующими уровень, который надо пройти, выполнив задание по курсу.
![Курс Unity-разработчик Курс Unity-разработчик](https://habrastorage.org/getpro/habr/upload_files/f50/96b/91d/f5096b91d6d6430dc192218ac994a548.jpg)
Вот только качество этих самых заданий, к сожалению, очень разное: от примитивных (открой редактор, найди каким по счёту является такой-то пункт меню, причём без учёта версий редактора, т.к. какой-то пункт меню в новой версии может запросто переехать куда-нибудь), до резко сложных, по сравнению с предыдущими, а местами и некорректно сформулированных, вдобавок возможно ещё и с ошибками. По поводу последнего я даже успешно срался в переписке с поддержкой. Возможно с тех времён уже что-то пофиксили и теперь подобного уже нет.
Почти каждое задание сопровождается неким справочным материалом разной степени полезности. Мне было проще, т.к. я с Unity знаком с года так 2012-го, но и в некотором смысле сложнее, т.к. мне сложно объективно оценивать полезность и качество данных справочных материалов в силу профессиональной деформации, так что все задания я выполнял основываясь на собственном опыте и знаниях.
![gg lol kek gg lol kek](https://habrastorage.org/getpro/habr/upload_files/9a0/ada/b9b/9a0adab9b5cb35c3f5f8c98442f45923.jpg)
Под конец курса авторы видимо решили подзабить на обучающий материал, и почти все задания финальной части выглядят как «Напиши прототип такой-то и запиши видео, что всё работает, вот по этому чеклисту». Причём, насколько я понял, проверку заданий тоже решили в некотором смысле автоматизировать.
Когда ты отправляешь такое задание на проверку, платформа пишет, что проверка займёт
1-2 дня, и ты такой думаешь, что наверное его реально проверяют серьёзные (ну или по крайней мере обученные) дяди, учитывая, что некоторые задания идут как партнёрские.
Правда каких-то серьёзных имён, вроде Nival'а или Playrix, я там не увидел, но может это я отстал от жизни, либо эти конторы либеральные и нахрен им этот всероссийский конкурс не сдался. Однако потом я заметил, что у меня в панели справа появились некие «задания на проверку». Оказалось, что тебе нужно отсмотреть чьё‑то задание и оценить его. Тут‑то я и понял, что скорее всего именно так они эти задания и проверяют — отдают его проверку на откуп комьюнити. С одной стороны здравое решение, но с другой — качество объективной оценки будет ниже, особенно когда тебя явно просят быть снисходительнее. Один раз, я так понял, кто‑то даже попытался таким образом отправить битую ссылку, в надежде, что прокатит (спишут на сбой ВК или ещё чего, мол, а человек всё сделал, поэтому давайте зачтём).
![](https://habrastorage.org/getpro/habr/upload_files/0eb/b98/54f/0ebb9854f6b1d72143ab63e5234ce3ec.jpg)
В общем, сделав несколько подобных заданий и поработав, таким образом, с OBS Studio (почувствуй себя стримером, лол), я подумал: а почему бы не совместить приятное с полезным?
Я вспомнил, что после всех тех недавних событий и блокировок магазинов приложений, в какой-то момент прозвучала фраза про «отечественный магазин приложений» и даже прозвучало название: RuStore. Я решил глянуть - оказалось вполне себе рабочая вещь, там даже есть приложения, в том числе полезные. Ну я и подумал - дай ка, опять же, ради интереса, доработаю слегка напильником свой прототип до более-менее приемлемого состояния и попробую залить в магазин, заодно и посмотрю как оно там всё устроено и насколько это сложно. Ну и заодно внесу свой небольшой вклад в поддержку отечественного производителя, так что моя шлюха одобрения будет довольна. :-)
Кстати сказать, не думаю, что я один такой умный и наверняка много кому ещё пришла в голову подобная мысль, причём не исключено, что даже в рамках прохождения курса на платформе «Начни Игру», что в таком случае будет лишь дополнительным свидетельством о полезности данного конкурса. Возможно, что в этом и есть смысл всех этих заданий финальной части? Хотя наверное я слишком хорошо думаю о людях, это раз, и два - на самом деле это плохая идея, т.к. качество таких приложений будет, мягко говоря, не очень, а количество существенным. Steam вон специально боролся с т.н. shovelware у себя, правда в итоге пришли к самому простому решению - денежному. И теперь ты должен платить 100 баксов за публикацию каждой своей игры в ихнем магазине, а не так как раньше, 100 баксов один раз отдал и накидывай с лопаты сколько хочешь. Тут в RuStore пока денег не берут вообще. Но это только пока.
Так вот, одно из заданий финальной части курса включало в себя разработку прототипа игры «Падающие объекты», концепция которой очень простая: лови объекты, не давая им упасть, кликая на них мышкой, и получай за это очки, избегая при этом «плохих» объектов - им надо давать возможность упасть. В описании задания давался некий пример, который можно было воспроизвести, и допускалось использование бесплатных ассетов, но я решил, что надо быть оригинальным - даже картинка, нарисованная кривыми руками мышкой в
MS Paint, лучше, чем стандартный ассет из Asset Store'а или картинка из стока, поскольку она твоя.
Вообще, идея о том, что сейчас я по-быстрому наговнокодю на бесплатных ассетах (включающих в себя и графон, и скрипты игровой логики) игру и продам, привело к тому, что таких умных стало, понятное дело, много. И в итоге получилось, что все эти мамкины геймдевелоперы, рассчитывающие на быстрый заработок, накидывают с лопаты игры, используя бесплатные ассеты из ассет стора, и это ожидаемо приводит к тому, что эти самые бесплатные ассеты становятся узнаваемыми. Т.е. ты прям видишь, что вот это — стандартная кнопка гуя из Unity, тут скорее всего скрипт FPS контроллера из стандартных ассетов, поставляемых с самим юнити, стандартная «лунная» физика через накинутые на объекты Rigidbody компоненты, и пр. Соответственно 3D модели можно тоже либо взять из ассет стора, либо из какого‑нибудь Mixamo. Ну и заставка «Made with Unity» при запуске тоже «какбе намекает». И получается, что то, что создавалось как вспомоществующее средство для ускорения / облегчения разработки, в результате беспорядочного использования профанировалось до уровня «а, ну всё понятно, слепили на коленке по-быстрому». Лишнее подтверждение, что путь, который кажется простым, ни хрена не прост, поскольку этот путь видят все и соответственно дружно в него и ломятся.
Ну и естественно, когда толпа народу начинает вот так по-быстрому клепать контент, качество этого самого контента будет понятно какое, вдобавок реально хорошие произведения будут теряться на фоне общей каловой массы, так сказать, и их будет тяжело найти. Из-за этого стиму пришлось даже отдельно работать над тем, чтобы снизить количество низкокачественных игр в своём магазине.
![В некотором смысле типичный shovelware В некотором смысле типичный shovelware](https://habrastorage.org/getpro/habr/upload_files/240/f3b/aca/240f3bacac1fe56ca30997ba9230f5f4.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/34e/6d8/fc0/34e6d8fc0c969e30f84dce7ac0a824d3.png)
Пример на картинке выше, конечно, не совсем корректный, т.к. подобные «игры» делаются больше по приколу или ситуативно (вторая картинка где-то времён 2014-го года, вроде как в стиме больше нет, была ещё похожая про украинцев), но, тем не менее, их тоже можно считать накиданными с лопаты, потому что таковыми они и являются - сделанные под конкретный случай, чтобы словить хайп на теме. Я попробовал нагуглить что-то более подходящее по теме shovelware'а, но реально ничего не гуглится, так что похоже стим действительно проделал серьёзную работу.
К сожалению, мои творческие скиллы находятся практически на нуле, поэтому для какого-никакого графона для своей тестовой игры мне всё же пришлось лезть за некоторым артом в Интернет. Как оказалось нарисовать даже простую иконку не так-то просто. Гуй и мáскота я сделал сам, но не сказать, что это прям уж достижение. Со звуком заморачиваться не стал и надёргал всякого отовсюду, чтобы не тратить уж сильно много времени на это. И вот так, потратив примерно неделю, я довёл прототип до какого-никакого приемлемого состояния, и встал вопрос - что дальше?
Чтобы загрузить что-то на RuStore, понятное дело, нужен аккаунт разработчика. Можно зарегистрироваться, можно привязать свой аккаунт ВКонтакте (я сделал так). Потом нужно будет пройти процедуру верификации: загрузить первую страницу паспорта и покрутить головой в камеру. Затем пару дней тебя будут верифицировать, после чего, в случае успеха, можно загружать приложения.
Совершенно понятно, что авторы RuStore'а пытались копировать общий интерфейс Google Play, чтобы людям было максимально привычно. Поэтому тут так же есть т.н. «консоль разработчика» - специальная страница, где разработчик может управлять своими приложениями. При первом заходе в консоль перед вами будет пустая страница с одной кнопкой с предложением создать первое приложение (на картинке у меня приложение уже создано, пустую страницу я заскринить не догадался).
![](https://habrastorage.org/getpro/habr/upload_files/b68/c59/e72/b68c59e7246c5b900a524c0b22d4e6f5.jpg)
Жмём «Добавить приложение» и откроется страница создания приложения, весьма похожая на аналогичную из Google Play.
![](https://habrastorage.org/getpro/habr/upload_files/8db/3d2/c38/8db3d2c38f1549db3a87a7d92d97b2db.jpg)
Здесь собрана всякая инфа по использованию приложения: подписки, монетизация, статистика и пр. В разделе «Версии» (на картинке он открыт) можно загрузить собственно сам файл приложения в виде apk. Вот тут-то и начинается самое интересное.
Исторически для загрузки приложения в Google Play необходимо было иметь подписанный apk файл приложения. Как говорил Боромир: «Нельзя просто так взять и загрузить apk в Google Play». Почему так - я не знаю, видимо исторически сложилось (https://source.android.com/docs/security/features/apksigning?hl=en).
Чтобы подписать своё приложение нужен сертификат. Т.е. механизм двухступенчатый: создание сертификата, потом подпись своего apk при помощи этого сертификата. К счастью, инструкция как это делать гуглится легко (можно смотреть https://habr.com/ru/post/324350/ и https://learn.microsoft.com/ru-ru/xamarin/android/deploy-test/signing/manually-signing-the-apk). Общий принцип один: при помощи keytool генеришь сертификат, а потом при помощи утилиты apksigner подписываешь (в статье с Хабра пишут про jarsigner, но вроде как лучше использовать apksigner). Эти утилиты находятся в составе Android SDK, так что придётся его скачать. Он не маленький и скорее всего так и будет лежать на вашем компе мёртвым грузом, если только вы не разрабатываете в Android Studio. Из утилит, помимо вышеупомянутых, может пригодиться разве что отладчик для просмотра логов с телефона при запущенном приложении, но его тоже надо настраивать для подключения к своему телефону (по крайней мере раньше так было).
zipalign'ом я не пользовался и вроде как для RuStore он и не нужен. Во всяком случае пока.
Имея на руках подписанный apk, можно идти на страницу своего приложения и загружать его. Страница загрузки также выглядит похоже на аналог из Google Play, разве что всяких разнообразных опций поменьше.
![](https://habrastorage.org/getpro/habr/upload_files/2c1/3a9/11f/2c13a911f150ab0a072d2df99d90a2ad.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/7d7/814/471/7d7814471ba15af5a00541d03133c5ad.jpg)
Заполнив все поля, жмём «Отправить на модерацию», и приложение отправляется на модерацию.
![](https://habrastorage.org/getpro/habr/upload_files/533/9b6/3b9/5339b63b9f61ef05871c5c1c1d76589b.jpg)
Сколько по времени длится модерация я не знаю, но вполне возможно, что этот процесс автоматизирован. Я отправлял в пятницу ночью, и сегодня (в субботу) оно опубликовалось, так что вполне возможно, что валидирует робот путём прогона твоей apk'шки через какие-нибудь внутренние инструменты тестирования. В общем, в случае успеха, ваше приложение появится в RuStore и его можно будет найти поиском и установить. :-)
![Опубликовано! Опубликовано!](https://habrastorage.org/getpro/habr/upload_files/8fd/581/ef4/8fd581ef4635c422774caa95fa7392bb.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/56d/d59/5e9/56dd595e98309e712baa628aeec8bb79.jpg)
Как видно я не стал заморачиваться по поводу названия и чего-то ещё. Заодно и решил сделать практически всё на русском, коль скоро грузим в наш, российский, магазин приложений. :-)
Дальше будет несколько пафосно звучащее заключение, но так уж получилось. ;-)
Итак, что же мы имеем на выходе? А на выходе мы имеем, как это ни удивительно, весьма перспективную область. Пока западный мир переживает кризис игровой индустрии в грядущей и частично наступившей форме, у нас есть возможность — не догнать и перегнать — нагнать и восполнить. В отличие от запада у нас ещё остался некоторый нереализованный потенциал — мне на память приходит большое количество игр со времён позднего СССР, сделанных на компьютерах серии БК и прочих. Да, что‑то из современного мы можем, так сказать, склонировать и перенести на отечественный рынок, заполнив пока ещё пустующую нишу, но можем и создать что‑то своё оригинальное, пользуясь непродолжительным, но всё же имеющимся опытом прошлого. Да, это всё требует денег, времени и сил, но мне кажется это возможно, и я бы даже сказал, это нужно сделать, т.к. когда ещё представится подобный шанс? Не знаю кто запустил данный конкурс «Начни Игру», но при всех его недостатках, упомянутых выше, это крайне удачное и нужное дело, возможно только что, как я уже сказал, несколько запоздалое по времени. Иногда мне приходит на почту рассылка, связанная с новостями по данному конкурсу, и по крайней мере то, что я там иногда читаю, внушает оптимизм. Проводятся всякие мероприятия, лекции, встречи, т. е. идёт какой‑то движ. Остаётся только надеяться, что всё это не впустую, хотя наверное каких‑то результатов можно будет ожидать только лет через 5 — опять‑таки, упущенное время. Если бы всё стартануло в том же 2010-м, мы бы уже сейчас пожинали плоды.
Магазин RuStore лично на меня произвёл исключительно положительное впечатление. Мне нравится как он выглядит, мне удобно им пользоваться, он простой. Единственное чего не хватает — это контента. Нужен свой твиттер, свой инстаграм и пр., впрочем об этом уже было неоднократно сказано. Все возможности для этого, я считаю, у нас есть, к тому же и платформа для распространения тоже есть. Да, я понимаю, что кто будет использовать какой‑то клон того же инстаграма, если есть оригинал? Тем не менее, как славянофилы прошлого я тоже выступаю за бóльшую ориентацию на своё. Каким бы оно ни было, своё лучше чем чужое. Мы тоже можем творить, и наши творения будут интересными и оригинальными, т.к. будут отражать плоды нашей культуры и традиций, которые весьма отличаются от западных. Если западные произведения больше ориентированы на продажу и потребление, то мы можем создавать что-то для несения разумного, доброго и вечного, как противовес западному. И таким образом разнообразить общий игровой (и не только) контент в мире.