Или история, как написать свою игру.
Часть 1.
Всем привет!
Статью начал писать во время карантина коронавирусной инфекции COVID-19.
Начинать с вступления что я с детства мечтал писать игры и много играл, не буду. Это и так понятно.
Начну так:
Изучая ЯП Python начал писать программы, которые надо было потом как-то переносить на Android и iOS. Для чего начал искать интересные инструменты для простой реализации. Конечно, в просторах интернета я наткнулся на Unity, простой редактор, ЯП C#, хорошая информация на сайте. Но, как и везде, есть свои подводные камни. Для меня это было изучение C#, так как я работал с Python.
Что сделал первым делом, так это отправился в магазин и купил себе книгу “Unity в действии!” автор: Джозеф Хокинг. Потратив две недели на книгу и использование всех её примеров, пришел к выводу что игры делать не так и сложно. Но кто знал, что я так буду ошибаться.
В итоге, я забил на разработку приложений под ЯП Python, начал учить как могу С#, изучать сам редактор Unity. Так как идея создания собственной игры не давала никакого покоя.
Начало
Прочитав книгу, посмотрев кучу видео по созданию игр в просторах интернета я собрался силами начать писать игру.
Сразу хотелось сделать игру онлайн, прекрасный баланс, хорошая графика, и всё что бы было лакшери. Но жизнь ударила членом по лбу и просто дала понять, что это просто невозможно на данный момент с моими знаниями языка и редактора.
Я опустил руки и начал дальше учить ЯП и работать просто с редактором.
Первый успех
В один обычный рабочий день, друг скинул мне ссылку на игру, которую он написал на JS, забавная игра, кликер гоночки, но это только на сайте. Я решил взять идею и написать игру на Unity. Проработал идею, начал писать первый код, обычные квадратные префабы для начала и всё это сделал под Android. Моей радости не было границ! Я сделал игру!
Однако она была просто пустая, ездит коробка, врезается в другие коробки. Тут наступила пора рисовать. Программу я выбрал Blender. Так как Maya была слишком сложна, хоть и работал я с ней около года уже. Знакомство с Blender у меня прошло быстро, зная базу графических редакторов. Я сделал пару моделек препятствий, машинки, монетку и окружающие безделушки по локации. Добавил пройденный маршрут, собранные монетки, финишную сцену, начальную сцену, меню и магазины.
Первый провал
Всё собрал на Android... Начал играть... Первый удар по лицу с ноги от игры! У меня все игровые иконки, надписи и всё что касалось UI было в хрен пойми каком состоянии. Игра ужасно лагала, хоть и использовал низко полигональные модельки. Тут руки и опустились на этом проекте.
Сложности для того, чтобы их преодолеть!
Взяв тетрадку, начал накидывать новую идею уже новой игры.
“Лабиринт! Проще пареной репы!” Подумал я и начал описывать механику и полную идею игры. Для начала я думал нарисовать кучу уровней и их вводить в игру. Но я знал, что такое генераторы. Как я и думал, в интернете есть уже готовые решения данных генераторов. Один из отличных решений я нашел на канале YouTube, его ведёт Emerald Powder. Его подача информации меня порадовала. Всё понятно и наглядно просто, рекомендую кстати!
Был создан персонаж, главное меню, первые локации. Всё отправил на телефон, проверил, работает! Но требует очень много ресурсов телефона. Я потратил ещё два месяца на изучение всех вопросов по оптимизации графики и кода.
Ох и делов оказывается я наделал на начальном этапе. Что бы снизить нагрузку на графику, я начал активно работать с освещением в игре. Тени и вся работа света в игре, очень сильно влияет на производительность, так как это мобильная игра, качество света не требует особых вложений.
Следующий этап был в работе с материалами. Они тоже достаточно сильно нагружают графический процессор. Немного посидев над материалами, я сделал всё под мобильные телефоны. Изменил некоторые модельки в игре, уменьшив полигоны. Нагрузка с графического процессора уменьшилась с 99% до 15%, а местами и до 8-9%. Это был настоящий прорыв!
Дальше работа над кодом. Если 80% нагрузка на CPU, я счёл это очень много. Телефон у меня в обычном режиме других простых игр работает в районе 23-28%, это с учетом всего что поддерживает жизнь телефона. Я захотел результат, который будет ближе к этим цифрам.
Просмотрев все скрипты, начал активно переписывать всё что есть в Update, уменьшая нагрузку на каждый кадр. В итоге у меня средний показатель CPU остановился на уровне 25-30%.
Наверное, это бета - тестирование
Как и любой человек, за свой труд я хочу получить маленькое вознаграждение. Поэтому в игру была добавлена реклама, которая увеличивает заработанные монеты за уровень. Больше рекламы там на данный момент нет и скорее всего не будет. Я не люблю сам, когда в игре постоянно реклама после каждого действия. Я решил всех ограничить от этого. Хотите больше монет, смотрите рекламу, не хотите смотреть рекламу, начинайте следующий уровень, всё просто!
Сделал 50 уровней, систему улучшения артефакта. По играл, устраивает, пора делать следующую локацию. Нарисовал всё для следующей локации и сделал ещё 50 уровней. На данный момент в игре 100 уровней, чем дальше проходим, тем больше и сложнее уровни и больше монет.
Дальше звук. Добавил звук при нажатии кнопок, сбор монет и нашёл простые мелодии, где вроде как не надо указывать авторские права. Сделал меню настроек.
На данный момент пока всё!
Буду рад если скачаете игру, посмотрите на неё и скажите своё мнение. Вдруг есть баги, ошибки или ещё что-то, а я думаю, что там всё это есть.
Ссылка на игру:
https://yadi.sk/d/ys4RofkKhUmtMg
Заключение
Разрабатывать игры, писать код, графику, монетизацию — это далеко не легкий путь. Инди разработчики — это сильные люди! С великолепным умом! Невероятно терпеливы и с золотыми руками! Что и касается обычных разработчиков игр и всех, кто этим занимается.
Столкнувшись с этим, я понял, насколько это тяжело. Но не собираюсь на этом заканчивать! Следующая часть будет о том, как я буду шифровать данные, делать игру мультиязычной, как выкладываю её в Play Маркет а так же, как буду добавлять новый артефакт, новые локации. Ну и напишу итог за первый месяц в Play маркет. Если получиться сделать всё быстро, напишу ещё как буду переносить игру на iOS. Если буду одобрен вами, создам блог и буду писать пошагово о создании игры, с которой всё начиналось. Начиная от идеи, заканчивая детальным кодом.
Всем удачи!