-17

Радужный Синтез или Как я игру на Unity делал

Кода в посте не будет, потому что мне за него стыдно. Будет описание мыслительного процесса, приведшего игру к тому виду, в котором она есть.

Радужный Синтез или Как я игру на Unity делал Радужный Синтез, Rainbow Fusion, Разработка игр, Gamedev, Видео, Длиннопост, Android

В общем-то с детства было у меня желание создавать компьютерные игры и даже как-то в бытность школьником сделал пару поигрушек на Game Maker’е. И тут как-то одногруппник мне предлагает: «давай замутим игрушку, ты будешь программером, а я художником». Придумали идею: платформер(?) про летучую мышку. Осталось выбрать игровой движок, и по первости я решил посмотреть, чего там с Game Maker’ом. Game Maker как был убогим, так и остался, ничего толкового с ним не получилось. Стал искать другой дивжок и обнаружил, что бесплатная версия Unity с некоторых пор практически не имеет ограничений по сравнению с платной. И куча обучающих материалов есть, так что не придётся смотреть на него тупым взглядом как баран на новые ворота. На Unity всё пошло более гладко и вот уже я замутил такую физику движения летучей мыши, что сам был в шоке, нахрена это в простом платформере, зато вспомнил геометрию… но в итоге художник от меня сбежал, решив, что создание графики для игр – это не его. Поэтому та игра была отложена в долгий ящик, а я решил, чтобы усилия на освоение движка не прошли зря, замутить на нём что-нибудь другое, чтобы художник не требовался.

А что можно сделать из простых фигур? Разве что тетрис какой-нибудь. И тут я вспомнил одну из своих любимых игр на Dendy – Magic Jewelry и решил воссоздать её, только в космическом антураже. Летит, мол, корабль по космосу, а двигатели его запутываются радужной энергией, которая получается в радужном реакторе от реакций радужных элементов. А чтобы запустить реакцию, нужно собрать критическую массу – три элемента одного цвета в горизонтальный, вертикальный или диагональный ряд.


Ну а чтобы играть было веселее, нужно придумать какие-нибудь дополнительные правила, чтобы какие-то интересные ситуации позволяли игроку эффективнее расчищать игровое поле и получать больше очков, а значит и больше положительных эмоций от игры. Начал я с того, что составил список – какие особые ситуации могут возникать. А именно:


1. Несколько результативных ходов подряд.


2. Цепная реакция (когда после уничтожения собранной линии образуется ещё одна линия и тоже уничтожается).


3. Одновременное уничтожение двух или более линий разных цветов.


4. Уничтожение пересекающихся линий одного цвета.


5. Переход на новый уровень.


В ситуации 1 я решил добавлять небольшие надбавки к очкам, так, если за уничтожение обычной линии из трёх блоков даётся 300 очков, то за два результативных хода подряд +1 очко. Заодно появляется хоть какой-то смысл в наличии двух младших разрядов в числе очков. А чтобы было интереснее, и та и другая последовательность нелинейны: за линии из более, чем трёх блоков, количество очков возрастает согласно последовательности Фибоначчи, умноженной на сто. Т.е. за четыре блока – 500 очков, за пять – 800 и т.д. (теоретически в результате цепной реакции можно попробовать составить линии из большего числа блоков, но помимо этого есть и другой способ уничтожить сразу много блоков, о котором ниже). А бонусные очки за идущие подряд результативные ходы – это простые числа: 1, 2, 3, 5, 7, 11 и так далее. Так четыре результативных хода подряд дадут на одно очко больше, чем две отдельных последовательности из двух. Мелочь, а приятно.


В ситуации 2 решение было довольно очевидно: умножать все очки за ход на длину цепной реакции. Так, если игрок уничтожил линию из четырёх блоков, что повлекло уничтожение ещё одной из трёх, то за весь ход он получает (300+500)*2 = 1600 очков. Тут уже прирост множителя линейный, но зато это множитель, а не прибавка, и касается он всех очков, заработанных за ход, а значит отлично комбинируется с другими методами, описанными ниже.


В ситуации 3 нужно было что-то связанное с разноцветностью, подумал я, и решил выдавать за неё игроку группу («группа» – это те 3 блока, которыми игрок управляет) блоков «разноцветного» цвета, т.е. которые могут вступать в реакцию с любым другим цветом. Первоначально графически такой разноцветный блок представлялся блоком, каркас которого циклически меняет цвета, а внутри была «капсула» (т.е. такое геометрическое тело, выглядящее как капсула с лекарством) радужной раскраски.


Что касается ситуации 4, тут я рассудил так: ситуация эта определяется, во-первых, одним конкретным цветом пересёкшихся линий, во-вторых, конкретным блоком, в котором они пересеклись. Значит, нужно заспаунить на месте пересечения некий особый блок, причём связанный с этим конкретным цветом. Сначала я обозвал его «заряженным» блоком и выглядел он, как блок такого же цвета, только кристалл внутри пульсировал. Уничтожался он как обычный блок – построением в линию с таким же цветом, а результатом было уничтожение всех блоков такого же цвета на игровом поле (при этом количество получаемых очков всё также вычисляется по последовательности Фибоначчи, это и есть способ уничтожить много блоков, не выстраивая их в линию, о котором я упоминал ранее). Но потом я решил, что так от блока будет мало пользы: для его появления нужно уничтожить порядочно блоков определённого цвета, а для активации – ещё немножко того же цвета, да после этого такого цвета, наверное, и так на поле мало осталось. Поэтому я решил смягчить по крайней мере условия активации и позволить «заряженному» блоку активироваться, как и «капсуле» реакцией с любым другим цветом.


Тут, раз у «капсулы» и «заряженного» блока появилась общая черта, нужно было как-то это выразить, и очевидным решением было сделать каркас «заряженного» блока тоже циклически меняющим цвета. Но выглядело это так себе, и если для «капсулы» это можно было позволить, потому что она в любом случае не жила дольше игрового хода, то «заряженный» блок мог находиться на игровом поле достаточно долго. Так что для начала это переливание разными цветами я заменил каркасом белого цвета. Но сам пульсирующий кристалл внутри тоже смотрелся убого, честно говоря. Поэтому я подумал-подумал, да и поменял его на чёрную дыру. Постойте, скажете вы, но ведь у заряженного блока важной характеристикой является его цвет, а чёрная дыра – она того… ну… чёрная. Верно, но это не значит, что ей нельзя выразить цвет: ведь у неё есть ещё и аккреционный диск, а вот его как раз можно сделать вполне красочным. Ну или по крайней мере цветным. Да и к легенде неплохо подходит: большое превышение критической массы создаёт в реакторе микроскопическую чёрную дыру. Ну а раз «капсула» – это по эффекту своему практически то же самое, только без отдельного эффекта на конкретный цвет, то я вернулся к ней и тоже сделал чёрной дырой, только с бесцветным (серым) аккреционным диском.


Комбинируя эффекты от ситуаций 2, 3 и 4 порой можно за один-несколько ходов собрать неприлично много очков или по крайней мере капитально почистить игровое поле. Но цель моей игры – вызвать у игрока положительные эмоции, а не отрицательные, как сейчас модно (ну там всякие Dark Souls и прочие «это такая крутая игра, что вы в гневе на неё разобьёте свою клавиатуру»… нафиг мне это надо, мне клавиатура моя ещё пригодится, да и психика тоже). А с доставлением положительных эмоций такие моменты справляются лучше всего, и, значит, игрок будет продолжать играть в надежде получить их ещё.


Наконец, случай номер 5. В Magic Jewelry на денди в этом случае давалась группа блоков-черепов, поставив их на блок определённого цвета можно было уничтожить все блоки этого цвета на поле. Но у меня нечто подобное уже происходит в случае номер 4, а повторятся я не хотел. Честно говоря, я уже было решил, что ничего тут больше не придумать, и хотел оставить этот случай без отдельной награды. Но почти в последний момент, когда вся остальная игра была уже готова, меня осенило, и я сделал «звёздные блоки» (рабочее название: «блоки-дрели»). Они должны были уничтожать весь свой столбец и ряд (а так как они идут группой, то 3 ряда). Но от этого было бы мало пользы, если верхняя граница наполненности реактора у игрока более-менее плоская. Поэтому в итоге я сделал, чтобы «дрель» сначала просверливалась до низа игрового поля, а потом уже уничтожала три нижних ряда. Выглядят звёздные блоки как трёхмерные звёздочки, у которых каждый лучик своего цвета, с каркасом чёрного цвета. Почему чёрного? Сначала я хотел сделать белый, но, во-первых, белый каркас у чёрных дыр символизирует, что их нужно поставить в ряд с каким-нибудь другим цветом, а дрель ни с чем в ряд ставить не надо – она сама работает. Во-вторых, как белый контур создал хороший контраст для чёрных дыр, так чёрный контур создал хороший контраст для разноцветных звёздочек. Наконец, в-третьих, уничтоженные дрелью блоки не приносят никаких очков и не активируют свои способности (это касается чёрных дыр с цветными аккреционными дискам), и с этим чёрный цвет тоже неплохо сочетается.

Радужный Синтез или Как я игру на Unity делал Радужный Синтез, Rainbow Fusion, Разработка игр, Gamedev, Видео, Длиннопост, Android

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


А ещё, раз мы в космосе, там должны встречаться всякие космические явления. То цветная туманность по пути встретится (изображена на заднем плане), увеличивая шанс спауна блоков определённого цвета, то корабль пролетает мимо цветной звезды (выражается цветом освещения), удваивая количество очков за уничтожение блоков этого цвета. Бывают и скопления астероидов, бомбардирующие корабль и уничтожающие случайные блоки на игровом поле, и гравитационные аномалии, двигающие блоки на поле куда попало и ломая игроку все планы… но если повезёт, то наоборот – создавая линии даже без его участия. Всё это призвано вносить в игру разнообразие.


Но тупо выдавать подобные явления случайно было бы скучно, поэтому вероятность всех этих событий меняется от уровня к уровню, являясь произведением квадратного корня и синусоиды с разным периодом для разных явлений, которое у меня в коде так и называется BigScaryFormula. По-русски смысл формулы в том, что на каких-то уровнях будет много астероидов, но мало аномалий, на других – наоборот, на третьих – и того и другого навалом, на четвёртых – ни того, ни другого, но при всём этом в целом тенденция к увеличению вероятностей с увеличением номера уровня.


А ещё в Magic Jewelry была классная музыка, ради которой я в своё время в неё и играл. Но то была китайская подделка, и им не надо было заморачиваться с авторскими правами. А я собирался публиковаться (и таки опубликовался) в Google Play, так что не мог позволить себе пойти против закона. Пришлось искать бесплатную музыку. Это, конечно, не это, но что есть, то есть. Вроде удалось подобрать по крайней мере не раздражающую и как будто даже более-менее подходящую. В крайнем случае её громкость регулируется в настройках.


Там же, в настройках, можно включить Google Play Services, чтобы получать ачивки и возможность заливать свои результаты в онлайновую таблицу рекордов. Ведь всем известно, что самое крутое – не проходить игры, а показывать всем в онлайне, что ты это сделал!


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

Дубликаты не найдены

0

Прикольно, пили урок, я как то пытался нечто подобное сделать, но не осилил матрицы.

0
Я сколько делаю игры (ну ладно, всего месяц, и всего одну) — самое сложное для меня — придумать идею. Остальное больше интересно, и весело.
раскрыть ветку 1
0

А у меня всё наоборот(

Похожие посты
82

Первый опыт публикации игры в Play Market и результат - удаление Google Developer аккаунта на альфа тесте

Всем привет.

Я помню момент, когда у меня появилась первая приставка Dendi, я начал стрелять по уткам из пистолета, это был просто новый, невероятный мир.

Кстати, моя первой книгой по "кодингу" была -

Первый опыт публикации игры в Play Market и результат - удаление Google Developer аккаунта на альфа тесте Gamedev, Android, Google, Длиннопост

Я по сто раз читал и перечитывал все эти коды и что они дают в  тех играх, которых у меня никогда не было, но все равно было очень интересно. Читая про то, что дает тот или иной код, детское воображение рисовало миры, как при прочтении художественной книги.

После нескольких убитых приставок на новый год мне подарили Сюбор, настоящий компьютер как в Американских фильмах, теперь я тоже буду взламывать пентагон! В общем счастью не было предела. С ним в комплекте был "загрузочный картридж" (не знаю почему всегда его так называл" и книжка по бэйсику с примером написания своей игры. Код этой игры, я помнил наизусть последующие 10 лет, т.к. набирал по 3 часа каждый день, и каждый раз ничего не работало.

В один из дней наверное на 1000-й попытке, появился Франкенштейн из мира спрайтов (по учебнику это должен был быть Марио), набор непонятных квадратов и кусков тайлов. Когда я это увидел, я был похож на хищника, который неделю выслеживал хоть какую то добычу и вот она появилась на горизонте. Я боялся даже пошевелиться, что бы не спугнуть этот набор из спрайтов.

По описанию, он должен управляться "стрелками" c клавиатуры. Я осторожно нажимаю "вверх" - 0 эмоций, "вниз", "влево" - тоже самое. При нажатии кнопки "вправо" - спрайт двинулся. Мои эмоции в тот момент -

Первый опыт публикации игры в Play Market и результат - удаление Google Developer аккаунта на альфа тесте Gamedev, Android, Google, Длиннопост

Самой собой далее был сбор всех кто был дома и показательные выступления моей ААА игры, где непонятный набор пикселей при нажатии двигается вправо, упирается в край экрана и на этом game over.

Прошли годы, я уже хорошо знаю паскаль, пересаживаюсь на delphi, устраиваюсь после  2 курса колледжа на летнюю подработку на стройку, живу в вагончиках. Лето, жара, раскаленные вагончики, до часа ночи ты спишь под ними, т.к. внутри вагона без кондеров, с тебя все течёт. После летней подработки и начала нового учебного года, я представить не мог, что должно человека заставить там работать долгое время, ведь это был просто ад.

Закрываю глаза... открываю - мне 31, семья, ребенок и я работаю на стройке, живу в вагончиках. Скитаюсь по всей необъятной, уже в роли зам.директора, но это все далеко от моих мечт.

Год назад начал учить С#. Написал диз.док своей игры, само собой это ммо с кучей фич, караванами, блэкджеком... - Кто вы в этой необъятной мультивселенной, Доктор Стрэндж? Ты можешь стать войном, защищающим тайные артефакты своего клана, или иметь трактир, где-то на задворках галактики.

Ожидание и реальность - пол года и я написал игру 4 картинки - 1 слово. В свою защиту хочу сказать - я изучил всех своих конкурентов - как правило над такими играми долго не сидят, ввиду этого выглядят они отвратительно, но я подошел к процессу с душой и сделал максимально приятный интерфейс ( на сколько позволяли мои навыки gimp ).

Первый опыт публикации игры в Play Market и результат - удаление Google Developer аккаунта на альфа тесте Gamedev, Android, Google, Длиннопост

На картинке выше меню с разделами.

Добавил firebase для аналитики и push уведомлений, так же реализовал добавления новых вопросов путем загрузки бандлов со своего хоста + еще куча незаметных мелочей.

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

Вот так, просто, без объявления войны. Без каких-либо предупреждений. Причина - вы или ваш связанный аккаунт после неоднократных нарушений правил забанен. Не пытайтесь регистрировать новый. Написал во все возможные адреса тех.поддержки, 2 недели тишина. Искал контакты представителей гугла в России, писал им с просьбой о помощи разобраться в ситуации - тишина. По советам людей писал на reddit, т.к. говорят что там сидят представители гугл и могут откликнуться - тишина. Что я мог нарушить на альфа тесте, ума не приложу.

Создать что-то: скульптуру, написать книгу, игру и пр. и не быть принятым людьми не так печально, как даже не получить возможности это показать.

В общем, вот так выглядит моя дорога из строительства в разработку игр.

Показать полностью 2
39

Игра в слова

Всем привет, хочу рассказать об разработке своей игры в слова.


Поиск идеи

Я сидел на диване и набрасывал "сногсшибательные" концепты видеоигр, а рядом со мной сидел мой маленький брат. Он сидел и переключал рандомные каналы на спутниковом ТВ. Он завис на каком-то иностранном канале, где 2 команды разгадывали слова. Я так посмотрел - идея хорошая, вроде простая в реализации.


Вид игрового шоу:

Игра в слова Игры, Android, Unity, Слова, Gamedev, Game Art, Длиннопост, Figma, Видео

Решил найти записи игры и нормально посмотреть игровой процесс. После нескольких пересмотров записей выписал все важное, написал базовый игровой процесс.


Получилось примерно такое:

Цель игры — правильно угадать 5-буквенное слово за 5 попыток или меньше.

Игра выбирает случайное 5-буквенное слово из словаря. Это cлово отображается на игровом поле. Игрок угадывает слово, которое начинается с данной буквы.

У игрока есть 5 попыток правильно угадать слово.

Каждая буква введенного слова выделяется на экране определенным цветом.

Игровая доска изменяет цвет, чтобы дать вам подсказки о том, каким может быть слово. Значение цветов выглядит следующим образом:

— Красный: вы угадали правильную букву в правильном положении

— Желтый: вы угадали правильную букву, но в неправильной позиции

— Синий: буква, которую вы угадали, не является частью секретного слова


Разработка прототипа

Держа в голове концепт телешоу, я приступил к разработке прототипа. В качестве движка для своей игры я уже выбрал Unity. Мой цель была проста — как можно быстрее создать рабочий прототип. Взяв некоторые графические элементы из Google Images, я сумел создать простейшее демо за день - два.


Разработка графики

Нужно было придумать простейший графический интерфейс, так как у меня руки немного из одного места. Решил рисовать простые векторные(можно просто растягивать и сжимать без потери качества) элементы. Так как осваивать Adobe Illustrator времени не много есть, решил выбрать Figma, простой и халявный редактор картинок.


Созданные элементы в Figma:

Игра в слова Игры, Android, Unity, Слова, Gamedev, Game Art, Длиннопост, Figma, Видео

Начал клепать интерфейс и игровое поле. Потом и другие элементы там же.


Разработка

Решил составить расписание и разбить работу по заданиям. Позаводил задания,  все записал, для этого выбрал Trello.


Моя доска в Trello:

Игра в слова Игры, Android, Unity, Слова, Gamedev, Game Art, Длиннопост, Figma, Видео

И пошел рутинный процесс разработки. Я выделял по 1-2 часа после работы, тут  главное не останавливаться, делать постоянно. Знаю по себе, как только забьёшь на несколько дней, дальше уже сложно вернуться к разработке. Когда я начинал работу над Lingo, проект задумывался очень простым. Это должна была быть просто бесконечная игра, и всё. После нескольких недель работы проект всё рос и рос, появлялись всё новые идеи. Я начал добавлять много нового. Конечно, я хотел добавить мультиплеер, игру по сети, различные темы и игру против компьютера. И, конечно, я хотел всё это сделать сам, включая всю музыку и изображения на фоне. К счастью, я был туповат, чтобы делать все и сразу) Но я сделал главный вывод: нужно придерживаться начального плана.


Поиск слов

Самым сложным моментом было нахождение нормальных словарей для добавления в игру, так как игра локализирована на 4 языка, работы было много. В нете подобрал большие словари и начал их перебирать вручную на предмет матов, множественных слов, слов, которые почти не употребляются. Кроме того, слова нужно было разбить на группы одинаковой длины. После нескольких вечеров я понял, что так дело не пойдет. Я решил писать свой парсер для слов, который на входе берет любой словарь и отбирает слова, которые попадают под заданные параметры.  В гугла оказывается есть статистика употребления слов, которую я начал использовать. Правда, была одна проблема, оказывается самые распространённые слова - ненормативная лексика. Спустя месяц мучений я пришел к нужному результату и сгенерировал свои файлики с нужными словами.


Вид словаря для англ языка:

Игра в слова Игры, Android, Unity, Слова, Gamedev, Game Art, Длиннопост, Figma, Видео

Напоследок хочу показать свой результат в видео

На этом пока что все. Спасибо, что дочитали.


P.S. Если у вас есть вопросы или вам интересен процесс разработки с удовольствием дам ответ.

Показать полностью 3 1
273

Rail Lords

Rail Lords Игры, Gamedev, Unity, Видео, Длиннопост, Приложение на Android, Игры на Android, Мобильные игры, Android

Приветствую!


В свободное время занимаюсь разработкой игр и рад представить недавно завершённый проект на андроид - головоломку Rail Lords.


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


Скриншоты из игры:

Rail Lords Игры, Gamedev, Unity, Видео, Длиннопост, Приложение на Android, Игры на Android, Мобильные игры, Android
Rail Lords Игры, Gamedev, Unity, Видео, Длиннопост, Приложение на Android, Игры на Android, Мобильные игры, Android

Видео прохождения одного из уровней:

Проект не является коммерческим, т.е. игра доступна бесплатно в Google Play Маркет и в ней отсутствует реклама или какой-либо другой способ монетизации.


Приятной игры!


P.S. в предыдущем посте писал, что буду сопровождать процесс создания постами-комментариями, но впоследствии изменил решение в пользу большого поста по завершению проекта, который будет готов в ближайшее время.

Показать полностью 1 1
Похожие посты закончились. Возможно, вас заинтересуют другие посты по тегам: