Как я сделал 3Д игру на iPhone

Если коротко, то вот ниже ссылка на игру. А если интересно поподробнее, то приглашаю к прочтению!

Скриншот из игры Endless Engine - сражение и дрифт с энергетической пушкой
Скриншот из игры Endless Engine - сражение и дрифт с энергетической пушкой
Скриншот из игры Endless Engine - прожигание врагов лазером во время дрифта
Скриншот из игры Endless Engine - прожигание врагов лазером во время дрифта
Трейлер 3Д игры Endless Engine для iPhone

Пробы пера

Давно хотел сделать игру, но занимался в основном только 3Д графикой. А идей было много. И до сих пор они появляются... Идея - это хорошо, но реализация - намного лучше. И намного важнее!

Для самостоятельной разработки было все еще необходимо уметь писать код, программировать. А учиться этому как-то не хотелось. Я пробовал разные подходы, начинал различные небольшие проекты. В Unity движке, в Unreal 4.

В «Нереальном» мне понравилось сразу всё, а возможность визуально программировать очень сильно соблазняла. В Unity на тот момент ничего подобного не было, поэтому я там ограничивался построением сцен и не более.

В Unreal был бодро начат проект. Сходу оприходован готовый шаблон, спрототипирован первый мир-уровень. Любимая тема - научная фантастика, Sci-Fi. В этом направлении фантазирований я и начал двигаться. И как основную фишку геймплея мне захотелось сделать возможность играть сразу в нескольких мирах! Для этого и были достроены еще 2 прототипа уровней-миров. Выглядело это классически: белый стандартный манекен, бегает по кубам с шахматной разверткой. Сначала это было от 3-го лица, потом от 1-го. Потом опять от 3-го (мне как-то больше нравилось от 3-го). Композиционно конкретно этот проект мне представлялся именно так.

А потом пошло самое интересное - программирование. Вернее, в моем случае - «макароноварение» из Blueprint нод. Персонаж запрыгал, забегал. Карабкался! И наконец-то, по нажатию кнопки, перемещался в другие миры. Идея параллельных миров понравилась тем, что я смогу реализовать разные художественные идеи в одной игре. Да и в целом выглядело свежо, и, как оказалось, до сих пор свежо! В гемплейном плане это было хорошим фундаментов для приключений по игровым мирам: где на одном уровне нельзя пройти, просмотреть что-то – можно это сделать на другом!

Вообще, немного вдохновения было из воспоминаний детства, от игры Legacy of Kain: Soul reaver. Там можно было перемещаться в духовный мир, что-то вроде астрала, и проходить в места, где в стандартном мире не проходится. Такая же фишка была в игре "Константин". К такой изюминке игры захотелось прикрутить мой любимый Sci-Fi. Для пущего эффекта: я подумал, что будет круто, если основным оружием игрока станет перемещение по мирам. Т.е. своим перемещением он уничтожает врагов. Ну, прям как в "Терминаторе 2" Шварценеггер переместился из будущего в прошлое и оставил после себя кратер в земле. Так и у меня: переместился в другой мир и бабахнул там от души неведомой энергетической силой!

Все эти мысли очень бодрили, и я сел делать. И тут начались сложности. Мои "макароны" в Blueprint-ах обкрутили всё и вся, но в итоге не заработали так, как я это представлял. Как результат, появилась вполне себе база для приключенческой ходилки-лазилки с возможностью перемещения по мирам, и не более. А мне хотелось динамики, эффектности. Проект отложился, я чаще «рисовал» свои разные 3Д работы, чем заглядывал в него. Камнем преткновения стал C++...

Unity движок как основа для будущей игры

На удивление, помог коронавирус. Вернее, самоизоляция и всё вот это «прекрасное», что происходило как будто бы недавно… Резко вокруг стало очень много шухера, неурядицы, круглосуточного заточения. И чтобы отвлечься от всего происходящего и придержать желание все-таки выйти из дома, было решено дальше разбираться с проектом. А с тех времен в голову пришло новых мыслей!

Например, я поразмыслил, что неплохо бы все тоже самое проделать и в Unity! Хотя бы потому что игру можно попробовать сделать для мобильного телефона: мощности девайсов подтянулись, картинка уже в играх хорошая. Все построил и снова начал искать способ "варить макароны". К тому времени, Unity начал пытаться интегрировать Bolt. Еще есть плагин PlayMaker. Сел разбираться. И тут я понял, что танцую на граблях. Надо было что-то менять, если я хочу дойти до конца.

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

Могу выделить некоторые книги, которые помогли. Они все по-своему были ничего, но часто я уже много знал из прочитанного или там слишком часто о простых вещах было написано. Ну прямо как в официальных туториалах! Хорошая книга была про теорию, и вообще про программирование - "Идеальный программист" Мартина Р.С. Там очень широко и в основном - теория, но хорошо даёт понять о профессии в целом. Если конкретно по программированию для Unity: Алон Торн "Искусство создания сценариев в Unity", Джозеф Хокинг "Unity в действии", Джереми Гибсон Бонд "Unity и C Шарп. Геймдев от идеи до реализации. 2-е издание".

Еще в период коронавируса сама Unity дала бесплатный доступ к своим обучающим курсам. Чем я и воспользовался! Уже на этапе изучения я начал экспериментировать и писать код в Visual Studio на C# языке. И на моё удивление, начало получаться быстрее, чем я думал! В полностью пустом проекте я написал скрипт управления камерой и движением ее вперед и радовался, как ребенок! Так была возрождена надежда.

Делать игру вдвоём! И online! Обязательно online!

Мой друг - банковский программист, уже работал не первый год в отрасли, и я иногда спрашивал у него про разные штуки по C#. За что ему отдельное спасибо! Это иногда помогало мне быстрее въехать в ситуацию, разобраться, что я делаю не так.

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

Мы начали делать проект вместе. Некоторые системы в игре стали появляться быстрее, чем я успевал их обдумать. В проекте теперь у меня «минус 1 роль», программирование. Но остальные: проджект-менеджмент, гейм-дизайн, дизайн уровней, моделирование персонажей, моделирование окружения, прототипирование и создание UX, отрисовка UI, маркетинг, прототипирование игровой экономики, звуки, музыка, создание спецэффектов, оптимизация 3Д и оптимизация игры в целом - все это ещё оставалось на мне.

Чтобы не терять запал, я решил, что будем пилить онлайн! Глаза горели, а я уже немного представлял наши будущие проблемы...

Первый прототип онлайн битвы

Достаточно поработав вдвоем над проектом, я осознал - что дело буксует. И причиной, как я думал и думаю - разные профессиональные области и разные представления об этапах производства. Нет, я не о программировании и 3Д. Я о геймдеве и банковской сфере, области софт-разработки. На этой почве у нас возникали недопонимания, я очень много времени тратил на донесение, как мне казалось, базовых вещей.

Например, в игру нужно было добавить оружие, и с программной части была спроектирована и синтегрирована система вооружения. Но проблема, как я видел, была в том, что система была сложнее, чем надо и вообще рассчитана на 1000 видов оружий. Но нам столько не нужно! У нас около десяти видов вооружения и только.

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

Ядро игры и стилистика

К этому времени я уже владел базовыми навыками, с помощью которых прототипировал отдельные системы в игре. Стоит сказать, что в игре уже вырисовывался геймплей. И вместо ходящего персонажа был едущий автомобиль. Мне понравилась идея телепортирующегося автомобиля на ходу. Прямо как в кино "Назад в будущее"!

Телепортация в параллельный мир в игре Endless Engine

Далее все это дело адаптировалось под мобильные устройства. Куча экспериментов, и в итоге - машина едет, поворачивает и на отдельную кнопку телепортируется в параллельный мир!

Дабы в игре ездил не кубик, я решил вкорячить какое-нибудь авто. Не знаю почему выбор пал на Toyota Supra, наверное, из-за влияния фильма "Форсаж", игры NFS Underground. Надо было обдумать, как, зачем и почему машина перемещается во временном пространстве! Так я придумал идею "вечного двигателя". В природе то его не существует, а вот в игре - всегда пожалуйста.

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

Но как быть в главном меню?! В гараже? Ведь машина не может остановиться! Пускай стоит на диностенде вечно! И крутит валы стенда своими колесами, вырабатывая электричество для гаража! Основную задумку нужно было поддержать визуально, эффектами и атмосферой. Чем я и плотно занялся. Нарисовал футуристичный заброшенный дворец на другой планете для главного меню, сделал Sci-Fi диностенд для машинки. Начал прорабатывать саму машинку и общую стилистику игры. Я решил не менять Supra на другую, а просто ее затюнинговать, а позже и стилизовать. Мне нравилась идея несерьезности, мультяшности и я решил делать всех «персонажей-машинок» утрированными, в чем-то гипертрофированными, с элементами Sci-Fi. Это идеально сочеталось с аркадным управлением и несерьезностью происходящего. Так появился первый авто-персонаж, которого я решил назвать Ninja.

Авто-персонаж Ninja в главном меню
Авто-персонаж Ninja в главном меню

Добавил спецэффектов для телепортации, теперь персонаж ездил-телепортировался и всё это выглядело опрятно и красиво. Только никаких миров еще не было, и врагов тоже.

Решил сделать Санкт-Петербург! В смысле Питер? Да, Питер! Это был бы один из миров, где гоняет персонаж. Я не играл ни разу еще ни в какую игру, чтобы там был Петербург. И подумал, что это отличная и свежая идея! К тому же, я тут живу, черпаю вдохновение и сам город очень красив. Стоит сказать, что схема центра города мне идеально подходила под геймплей. Идеально ровные улицы, ритмы из домов и фасадов.

Так вышло, что я долгое время жил в районе Пески, это тот что между метро Восстания и Чернышевской. Я там часто гулял. Именно этот район и решил взять за прототип мира. Многие дома в игре - это те самые дома Суворовского проспекта, и бесчисленных №-ая Советская улиц, проспект Бакунина и другие. Также не смог пропустить и дом на Кирилловской, где я впервые по приезду в Петербург снимал первое жильё.

Это был долгий и творческий процесс отрисовки домов и улиц. Рисовал я их в разных местах в разные периоды жизни, но всё равно четко помнил атмосферу, да и сейчас помню.

В один прекрасный день я дорисовал последний дом для уровня и позже собрал всё воедино. Получился уникальный райончик. Чтобы игрок был как-то ограничен уровнем, придумал футуристичные ворота, которые перекрывают выезд на некоторые улицы. Так сказать, инопланетные силы разозлились, что кто-то украл их "вечный двигатель" и они хотят его вернуть. Для этого они вторглись в "Святой Город" и хотят поймать игрока. Задействовали свои шпионские силы и сговорили властей города на поимку игрока. Так появились новые враги.

Улицы Петербурга как вдохновение для игрового мира
Улицы Петербурга как вдохновение для игрового мира
Дома Суворовского проспекта в игре Endless Engine
Дома Суворовского проспекта в игре Endless Engine
Sci-Fi ворота заточили игрока на районе Питера
Sci-Fi ворота заточили игрока на районе Питера

Уникальный мир и игровые механики

Так как игра не про рубилово на «серьезных щах», то и начальных врагов я решил сделать прикольных. А именно Жигули патрульный, Камазы, перекрывающие дорогу. Игроку же надо было от них убегать и сшибать взрывом от телепорта.

Патрульная машина, которая преследует и пытается остановить игрока
Патрульная машина, которая преследует и пытается остановить игрока
Тяжёлый грузовик, который пытается остановить игрока, перекрывая ему дорогу
Тяжёлый грузовик, который пытается остановить игрока, перекрывая ему дорогу

Взрыв от телепорта со спецэффектом уже был готов, а вот другие миры - еще нет. И вот второй и третий мир я решил сделать футуристичными, вымышленными. Так появились первые наброски "Чужой планеты", и "Футуристичной фабрики". И одновременно с этим возникла нужда в альтернативном способе уничтожения врагов, т.к. подловить с помощью телепортации врага достаточно трудно!

Базово была сделана возможность таранить, и я начал думать о вооружении. По правде говоря, на этапе моделирования персонажа у меня была мысль об оружии, и я сделал на капоте площадку на всякий случай. И тут же ею и воспользовался - нарисовал туда пулемёт. Теперь игрок мог таранить, стрелять и сшибать телепортом врагов. Отлично! Это создает уникальный опыт и вариативность игры. На базе этих механик родились наброски в голове разных авто-персонажей. Я решил сделать 5 тачек, 4 из которых - платные.

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

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

Дрифт, это прикольно! Но пускай будет и полезно! Была идея "очков стиля" за дрифт. Вот точно так же, как и в NFS Underground. Только здесь эти очки пускай можно будет куда-нибудь тратить. Так появился тюнинг тачек. Зарабатываешь дрифтом очки, тратишь на тюнинг. И чтобы было веселее и ярче, тюнинг надо веселый и красочный. Так был сделан тюнинг шин, дыма от дрифта, дисков, покраски кузова. Покраски и диски - вещь стандартная. А вот тюнинг шин - уникальная. Цветные шины! Оставляют цветной светящийся след на асфальте! Цветной дым из под колес! Все на стиле. Придумано - сделано.

Неоновый-циан след колёс и жёлто-красный дым от дрифта
Неоновый-циан след колёс и жёлто-красный дым от дрифта
Тюнинг цвета шин в гараже
Тюнинг цвета шин в гараже

В игре оставалось добавить разного оружия. Хотелось придумать разные тактики игры и разных врагов. Поэтому было решено забацать гранатомет, мины, дробовик, энергетическую пушку, ракетницу, энергетический дробовик. Ну а пулемёт уже был! А, ну и лазер! Конечно же, лазер! Который всех прорезает насквозь, не оставляя ни единого шанса!

Самое разное вооружение для сражений с врагами
Самое разное вооружение для сражений с врагами

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

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

Я начал делать "Чужую планету". Мне понравилась идея фиолетовой пустыни со скалами. Она перекликалась с атмосферой главного меню. Это был достаточно долгий этап работы, и стоит сказать - он еще продолжается. Но об этом, думаю расскажу в другой раз.

В какой-то момент я очень сильно морально устал. Не только от происходящего, но и от 3Д графики и всего, что с ней связано. Я решил отложить игру на неопределенное время...

Sci-Fi фабрика и финальный рывок

Спустя время меня вдохновила брутальная футуристика, разные Sci-Fi дизайны из металла, бетона, робототехники, архитектуры. Не могу сказать конкретно, что произошло, или как я отдохнул от всего этого и подобное. Просто сел снова рисовать, но уже третий мир.

Мне захотелось воплотить несколько архитектурных Sci-Fi задумок в начатой игре. Так появилось первое здание футуристичной фабрики. И я почувствовал, что поперло!!! Я решил, пока есть вдохновение и огонек - рисовать, когда имеется возможность и свободное время. В итоге это был один из самых объемных кусков работы, которые я всё-таки завершил. Я нарисовал целую фабрику в том стиле, в котором представлял, которым вдохновился. Она отлично вписалась в существующую концепцию игры, т.к. там нужно было что-то футуристичное. Осталось собрать и интегрировать. Собрал, интегрировал, настроил.

Футуристичная фабрика в игре Endless Engine
Футуристичная фабрика в игре Endless Engine
Параллельный мир, или что могло бы быть в очень далёком будущем на месте Санкт-Петербурга
Параллельный мир, или что могло бы быть в очень далёком будущем на месте Санкт-Петербурга
Sci-Fi мир со своей атмосферой и новыми "врагами"
Sci-Fi мир со своей атмосферой и новыми "врагами"

Стоит сказать про оптимизацию: процесс 3Д оптимизации идет до сих пор. Каждый раз, когда я фантазировал на тему «какой бы мир я хотел создать?», я думал - а как это будет работать на мобилке?? Т.к. я пользуюсь iPhone, то на нем и тестировал параллельно. Это достаточно кропотливый, но необходимый процесс.

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

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

Чтобы выпустить игру, я решил пустить в релиз 2 мира, которые уже отрисованы и готовы. А возможность играть в 3х мирах подряд оставить на обновления. Благодаря этому, игра пошла к финалу и, спустя многочисленные оформления и проверки, вышла в Apple Appstore для iOS 16 и выше. Такие системные требования необходимы, т.к. я точно это все проверил на своем устройстве iPhone 13 mini, iPhone SE 1gen. На остальных устройствах не было возможности хорошо проверить, отдавать игру на авось - неприемлемо. Возможно, в дальнейшем удастся тщательно проверить на разных устройствах Apple, в том числе более старых и iPad, и выпустить обновление.

Сейчас проект активно развивается, много идей фич и арта в планах. Скачать можно в AppStore, игра называется - Endless Engine.

Это был очень долгий и интересный путь, который только начинается! Спасибо за внимание!

1010
66
20 комментариев

Огонь 🔥 у меня есть идея для приложения, но всё оттягиваю процесс, такие истории оч вдохновляют

2
Ответить

Очень рад, что заряжает! Все получится, главное - терпение и упорство!

2
Ответить

Это просто бомба, мужик 🥹🔥🫡
Как говорил джобс шо многим сейчас не хватает упорства, упорства и еще раз упорства.
Респект шо не сдался🌟🫡🫡🫡🫡

1
Ответить

Спасибо! Для игры есть очень много идей и улучшений. Сдаваться не было в планах 😎

Ответить

"Требуется iOS 16.0 или новее".

Unity не позволяет использовать SDK для iOS 12 версии?

Ответить

Unity позволяет поставить версию iOS и ниже. Сама игра не тестировалась на старых устройствах, такие как iPhone 4, 5, 6. На устройствах с iOS 16 и далее отлично всё работает. Я не хотел бы, чтобы игрок с очень старым iPhone "мучался" бы с попытками поиграть, не понимая, что устройство "не тянет"

1
Ответить

Взнос для разрабов яблоко не подняли еще?

Ответить