Первая игра на Unity3d или как я не потратил зря отпуск
Выдался у меня в этом году небольшой отпуск. И решил сей отпуск я потратить на создание маленькой мобильной игры. В качестве движка я выбрал Unity3d, с которым уже давно хотел плотно познакомиться.
Идея игры - самолётик летит по свету, уворачиваясь от врагов и собирая монетки. То есть обычный скроллер, только без возможности дать сдачи неприятелям.
С результатом моей работы можно ознакомиться здесь - https://play.google.com/store/apps/details?id=com.MrBeard.Fl... . Если будут желающие - позже сделаю версию под win или linux.
А теперь о самой игре и том, как она работает.
Начал я с поиска подходящей графики для игры. После долгих поисков решил остановиться на Kenney Assets pack - http://kenney.nl/assets .
Далее я перенёс интересующие ассеты в проект юнити и начал создавать игровую сцену. Она состоит из нескольких слоёв - задники, игровые объекты(игрок, враги, монеты), передний план UI. Механика схемы следующая - самолёт игрока висит на одном месте по оси Х, перемещаясь по Y, а все прочие объекты движутся справа налево с разной скоростью(которая зависит от Z координаты), создавая ощущение движения самолёта игрока и разного расстояния для различных фоновых объектов.
Для задников создано два генерящих скрипта(один для объектов типа облачков и башенок с деревьями, другой для нижнего уровня задника(облачка внизу или земля, которые идут сплошным потоком). Третий скрипт передвигает объекты каждый кадр на длину, зависящую от Z. В скриптах задаётся частота создания объектов и наборы объектов для генерации( несколько разных облачков, несколько деревьев и башенок, набор спрайтов для "земли")
Когда задники были готовы и радостно пролетали мимо меня в одном направлении (налево), я взялся за игровой самолёт и его управление. Изначально я сделал управление через две кнопки(вверх, вниз) и был вполне доволен результатом, но когда я сделал первый android билд и попробовал поиграть, то быстро пришёл к выводу, что две кнопки, как их не расположи, неудобно. Если их поставить друг над другом слева, игрок не сможет положить пальцы сразу на обе и ему придётся управлять одним пальцем, постоянно его перемещая, промахиваясь и ругаясь. Если расположить кнопки слева и справа внизу, то придётся отказаться от возможности выпускать вражеские самолёты с нижней позиции, ведь иначе игрок их просто не заметит за своим пальцем и, врезавшись в врага, попомнит меня добрым словом. В итоге я пришёл к управлению, напоминающему Flappy bird и retry. нажимаешь на экран - самолёт летит вверх, отпускаешь - начинает лететь вниз.
Замечу, что от встроенной физики для игрового объекта я отказался, ускорения взлёта и падения, предельных скоростей - всё задано вручную и управляется скриптом через задание скорости объекта напрямую.
Генерация монеток в первой редакции была схожа с генерацией задников, но оказалась безумно скучной. Монетки генерировались на случайной величине Y и очень часто было невозможно достать две монетки подряд. Так что первым делом я переписал скрипт так, чтобы величина Y зависела от высоты предыдущей монетки. Их максимальное расстояние по высоте теперь такое же, какое может преодолеть игрок за то время, пока монетка пролетит расстояние, сгенерированное между этими монетками.
И вот монетки генерируются, их можно собирать, но это всё ещё скучно. Тогда я добавил различные наборы, в которых монетки расставлены определённым фигурным образом. Я не искал информации о том, как это лучше всего делать и придумал для себя два способа
1) Создать шаблоны в каком нибудь формате, где будет описана координатная сетка и расположение монеток относительно неё.
2) Создать объект-контейнер, в который будут помещены монетки, вручную расставленные в редакторе в нужном положении, после чего сохранить такой контейнер как префаб. Так я и сделал
Наборов получилось 7 штук. В генератор они добавлены с параметром веса, по которому и выбирается следующий набор. Если кто не знает, что такое "выбор по весам" - могу в комментах ответить)
Время добавить в игру врагов. В наборе спрайтов было 4 модельки самолёта, все разного цвета. Красный я решил использовать для игрока, остальные - для врагов. А для того, чтобы было не слишком скучно игроку и мне, врагов я сделал 3 типа(по количеству моделей у меня)
Зелёные - простой, стремительный. Летит по прямой, зато весьма резво.
Синие - Летят по параболе. Всегда начинают свой путь или с самого низа, или с самого верха.
Жёлтые - меняют свой курс, двигаясь к игроку. Приносят наибольший вклад в дело убиения игроков=)
Генератор случайным образом берёт префаб из набора врагов. Для увеличения сложности с каждым врагом уменьшается время между генерациями.
Это основная часть игры, сам геймплей. На его создание я потратил примерно два дня. Чем же я занимался оставшиеся 12 дней из двухнедельного отпуска? Учился создавать GUI, разбирался с Google developer console и плагинами для unity3d.
Дольше всего я пытался найти музыку для игры. Это, оказывается, безумно сложно сделать. Особенно в том случае, если не знаешь точно, что тебе нужно=). В итоге я нашёл короткую дорожку на http://www.playonloop.com/ . Советую сайт всем желающим)
Какие у меня были изначально планы? Я хотел создать 2 игры за 2 недели отпуска, изучить движок, а точнее его 2d составляющую. Получилось же лишь одна игра, да и та едва влезла в этот график. Жалею ли я о потраченном времени отпуска? Нет, было весело!
И это непередаваемое ощущение - залипать в собственную игру=)
Google play - https://play.google.com/store/apps/details?id=com.MrBeard.Fl...




