21 ноября 2017 21.11.17 3 1257

О моей разработке игры Hungry Animals

+3

Всем привет!
Тут скорее будет небольшая статья, с законченным проектом, чем просто проект.

На дворе был 2012 год, в голову пришла мысль сделать что-то простое на Unity, с простой графикой, не 3D соответственно, а 2D.
3D я решил не рассматривать по нескольким причинам:
1) На тот момент я вообще не представлял как вообще нормально оптимизировать 3D, мне же нужно было видеть нормальную работу на моём Android 2.3.
2) В 3D моделировании я не очень, так что, сидеть и изучать тонны литературы и сотни гигабайт роликов мне не хотелось вовсе.
3) Игра сама по себе должна была быть простой в обращении и понимании, а нагружать её какими-то моделями мне не очень хотелось.

Лучше чем 2D для меня и быть не может. Ну и приступил к задумке, что же я такого смогу сделать в 2D, во что играть людям захочется?
Посидел пару дней в интернете, полистал сайты, статьи и т.д. и в каждой игре, наверно как многие, находил какие-то недостатки. Думаю у каждого, хоть раз да было такое, сидишь, играешь в игру, и «кажется», что в игре чего-то не хватает. Банальная ситуация, возникают мысли о том, как можно бы было модернизировать игру, чтобы она понравилась каждому, но в какой-то момент приходит это — осознание, что всем не угодишь, всегда найдётся тот, кому игра вовсе не понравится. Соответственно, решил для начала выбрать аудиторию, которая будет играть. Аудитория стала людьми предположительного возраста от 6 до 12 и выше.

Но что же с игрой? Аудитория моя была, можно считать дети, игра должна быть в 2D, я умею программировать и не умею рисовать. Расклад с одного ракурса ужасный — искать художника, давать объявления, да и деньги на художника у меня отсутствуют, а найти человека готового поработать «за идею» очень тяжело, как оказалось. С другого ракурса, если игра с «простой» графикой, то и особо выпендриваться не требуется (мне так казалось), и решил своими силами реализовать всё это дело.

Но тут требовался подход к рисованию. Решил за основу взять простенькую игру Flappy Bird. Ту самую, что была давно удалена самим разработчиком с Google Play. В неё всё простенько, но рисовать пиксель арт мне было в новинку и я решил, что нарисую «менее пиксельную» версию.

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

Осталось нарисовать ещё кнопочки и всё, рисование завершено.
Тут возникла проблема, что в Unity стандартно не было, абсолютно ничего, что упростило бы мне жизнь в расположении кнопок на разных экранах с сохранением размера, а почему:
1) В Unity только недавно появилась такая вещь как UI, она оказалось ужасно кривой и разбираться в ней мне вовсе не хотелось.
2) Был плагин NGUI, который упрощал жизнь каждому разработчику, но он стоил денег, а денег у меня не было, да и покупать плагин на разок не хотелось, т.к. в Unity есть плохо работающий прототип UI, доработают. Искать пиратский плагин тоже не было желания, я люблю, когда всё лицензионное и официальное.
3) Оставался только GUI, на нём и остановился.
Т.к. отрисовка GUI в Unity производится попиксельно, нужно было найти сайт или статью с размерами экранов, в этом мне помогла одна статья на хабре, где были указаны популярные размеры экранов, которые используются на устройствах. Пара часов шаманства и тестов, готово. Кнопки с GUI сохраняют свои размеры.

Порисовашки мои оказались (уже как сейчас смотрю) ужасными, будто ребёнок рисовал всё это дело, а выглядело это так:

Тут скриншот меню игры и можно смело по нему сказать, что рисовал явно не специалист.

Хорошо, подумал я, часть дела сделал, надо бы подумать над тем, что будет происходить, обдумать игровой процесс. Тут не было желания делать как Flappy Bird, но хотелось чего то простого, и мне в голову, ничего проще, чем ловить еду с неба, не пришло. Так и сделал, теперь у меня был мой синий кролик, который ловит морковку, падающую с неба. Отлично. Но надо бы добавить какой-то вариант проигрыша. Жизни делать я не хотел, а вот вариант, что что-то упадёт на голову, меня вполне устраивал. На том и остановился, нарисовал камень, больше похожий на наковальню, и добавил его как опасный объект. Думаю ну круто, а как зверёк перемещаться то будет? В голову закралась мысль, что перемещение по стрелочкам будет замечательной мыслью, прикинул стрелочки по краям экрана, и реализовал простенькую систему, в которой игрок жмёт влево, зверь двигается влево, жмёт вправо, зверь тоже вправо. Ну, думаю, вроде всё готово. Выглядело это так:

Ох уж эти стрелочки.

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

Оставалась анимация. Дубовые звери меня вовсе не устраивали, и нужно было что-то с этим делать. В покадровой анимации я никакой, в связи с чем, решил, что звери у меня будут разбиты на запчасти, и я разобрал синего кролика. Уши отдельно, голова отдельно, руки, ноги, глаза, всё отдельно. Благо в Unity есть такая штука как аниматор. В нём и сделал анимацию на каждый объект. Собрал всё воедино, и вауля, готово. 

На том бы и закончил, но мне было мало одного кролика, да и игроку не очень, наверное, интересно играть, за одно и то же существо. Нарисовал ещё белку и ежа. Вроде завершено. Вот я и завершил, а зверей можно было выбрать так:

Жмём на иконку, например кролика, играем за кролика и т.д. Интересная система, не правда ли?

И что в результате? У нас есть 3 зверя, падающие предметы, набор очков, которые сохраняются в PlayerPrefs. На разработку «От идеи до релиза» у меня ушла примерно неделя. Закинул по одному сообщению на паре форумов. Вот и вся реклама.

Вопросы об инвесторах и спонсорах в такой игре, думаю вообще отпадают, т.к. я сомневался, что вообще кто-то захочет вкладывать деньги в такие игры, и не стал соответственно «закидывать удочки».

На дворе 2017-й год, работа – заботы, 3 года времени на что-то не было, и я решил, что надо бы переделать свой давний проект со зверями. Т.к. времени прошло уже много, я подошёл к оценке своего детища с другой стороны. У Hungry Animals 500+ загрузок, ух ты! В игре была ужасная графика, предметы ужасно быстро падали, невообразимый рандом 50/50 давал о себе знать, игрок даже не понимал, что ему собирать, и почему всё такое ускоренное, он проигрывал практически сразу же, а для того, чтобы можно было как-то играть, нужно было приноровиться, а не каждому захочется.

Меня всё это не устраивало, моё детище явно перестало мне нравиться. Нужно было что-то делать.
Так как я обзавёлся Photoshop’ом, и имел некоторый навык работы в нём, все перерисовки стали на много проще. Я приступил к перерисовке зверей, синий кролик стал серым, ёжик с белкой стали более привлекательными, добавил ещё пару кроликов, белок и ежей. Перерисовал ландшафт, теперь смотрю и вижу, что графика стала более приятной. Есть теперь какое-то разнообразие, интереснее стало. Выглядит теперь это так:

Перешёл к самой игре, добавил мини обучение, чтобы игрок понимал, что ему вообще делать, т.к. надпись «Click to Start» вообще не несла никакого понимания, а выглядело это так:

Непонятно, правда?

Теперь у меня есть мини курс как играть, всё вполне понятно. Жмём на зверя и тащим его влево вправо.

Далее — процесс выпадения предметов. Я ввёл таймер, относительно которого частота выпадения предметов увеличивалась, добавил 4 опасных объекта, разнообразие так сказать, которые не надо ловить.
До 30 секунды игры, игрок теперь должен понимать, что ловить надо морковки, жёлуди, грибы и т.д. и шансы выпадения «мусора» до этого времени срезаны до минимума.
Соответственно, появилась зависимость, что чем больше время, тем больше мусорных объектов.
Далее — скорость падения, я так же сделал зависимость от времени проведённого в игре, со временем предметы начинали падать всё быстрее и быстрее. Максимальная скорость, конечно ограничена. Теперь всё стало более понятно и гораздо интереснее. Так же, за сбор еды я ввёл получение монеток. Собираем, например морковки, получаем монетки. Побил предыдущий рекорд, полил больше монеток. А монетки можно потратить на приобретение животных.

Мне было недостаточно простого приобретения животных. Я решил ещё ввести приобретение вещей, чтобы можно было одевать своего зверька в одежды и наслаждаться своим творчеством. Нарисовал множество вещей, теперь можно приобретать за эти же монетки и вещи.

Далее, если есть игрок, который хочет всё и сразу я решил ввести в игру внутриигровые покупки. Не делал такие вещи никогда, и был не много озадачен, т.к. помнится мне, ещё из 2012 года, нужно было устанавливать внешние плагины. Решил для начала покопать в самой Unity, я был приятно удивлён, что появилась такая вещь как Services. Сервисы отлично так упрощают жизнь разработчку. Подключил Purshase. Оставалась банальность, выкачать SDK Manager, JDK установить это всё и радоваться жизни. Но тут возникли проблемы, которые дней 5 я пытался решить.

Началось всё с SDK Manager. После загрузки Android Studio – помнится мне в нём, опять же на 2012 год, был вынесен SDK Manager, который был в папке с Eclipse, но я его не обнаружил после часа копания по папкам. Начал рыть интернет. Опять же ничего путного я не нашёл. Решил зайти в саму Android Studio. Не может же такого быть, чтобы он без менеджера работал. Покопал ней, ничего не нашёл. Однако я копал везде кроме настроек, а ведь там всё самое сокровенное. И вот оно, чудо! Я обнаружил SDK Manager, который встроен в саму студию. Поставил на загрузку пакеты для моего старенького Android 2.3 и ещё дополнительные для работы с Google. Ушёл выгружать JDK, захожу на сайт Java, ссылки Download предоставила сама Unity, далеко идти и копаться не пришлось. Выкачал я Java SE 9.0.1. Поставил на установку, сам пошёл выгружать NDK. Выкачал.

Назначил папки с SDK, JDK, NDK – думаю, всё прекрасно. Захожу в Build, и обнаруживаю ужас летящий на крыльях ночи (Не чёрный плащ, уверяю ).
Минимальная версия для сборки Android 4.1, занавес, на моём телефоне игра точно не пойдёт. Ладно, думаю, не проблема, найдём Android 4.1. Поставил на сборку. И понеслись ошибки…
Ошибка Target устройства, заставила меня выкачать ещё несколько версий Android вплоть до самой последней.
Далее пошла самая ужасная ошибка, которую исправить было до банальности легко. Ошибка была связана с JDK. Видите ли, моя Unity 2017.1.0f3 и Java не договорились об обновлениях. И выкачанная мной версия JDK вообще не подходила для корректной работы. Пошёл рыть интернет, путного нарыл, к счастью. В какой-то статье указывалось, что Java SE 9.0.1 не заточен под Unity который у меня. Я выкачал Java SE 8u151/ 8u152. Предыдущие ошибки пропали, но появились новые, которые указывали на то, что не видит эта Java путь до дома, т.е. не указана JAVA_HOME, эту проблему я исправлял вручную, добавляя переменные указывающие на дом прямо в системках переменных среды.
И ура всё заработало!
Мой build собрался, и я ушёл тестировать мой переработанный проект по друзьям да знакомым.

После услышанных: “О, так на много лучше! Падают не так, словно с пушки стреляют. И инструкция «как играть» понятна”. Я был счастлив. И для «соревновательного» режима, решил ещё вдобавок подключить сервисы Google.

Сервисы Google взял для подключения аккаунта, отслеживания рейтинга игроков, открытие достижений, я решил, что это лучший вариант для меня, учитывая, что у меня отсутствуют какие либо деньги и желание для приобретения собственного сервера. Но и тут возникла проблема на пару часов, которая решалась скачиванием нужной версией плагина Google. Меня выручила эта версия GooglePlayGamesPlugin-0.9.42.
Далее, т.к. я сервисы так же ни разу не подключал, пришлось покопаться в документации GoogleSevice. Решилось всё довольно быстро. Я ввел рейтинг игроков, добавил 17 достижений, осталось протестировать. Тесты порадовали, всё хорошо работает, игроки видят друг друга и всё подключается.

На этом переработка всего проекта сверху вниз была завершена. Переработка у меня заняла примерно 2 .5 недели. И большую часть времени заняли процессы рисования. Мне нравится мой продукт. Мне нравится, что мои друзья и знакомые играют в эту игру. Это вдохновляет.
Опять вот вопросы об инвесторах и спонсорах в такой игре, я опять же сомневаюсь, что вообще кто-то захочет вкладывать деньги в такую игру и я побаиваюсь «закидывать удочки», да и не знаю куда.

В финале всё выглядит так:

Выбор зверьков!

Процесс игры, более 300 грибочков собрали!

Проигрыш, но мы побили свой рекорд!

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

Ну и ссылка на игру :)
play.google.com/store/apps/details?id=com.XawySoft.HungryAnimals&hl=ru


Лучшие комментарии

Лучше чем 2D для меня и быть не может.
О, я точно так же свою вайфу успокаиваю, когда на улицу выхожу_)

Чтож, довольно мило расписал путь разработки, я бы придрался к ошибкам (а их много), но голова уже не варит, да и устал я.
Главное чтобы Вам самим нравилось ваше дело
Хорошая позиция.

Удачи тебе в дальнейших проектах.
больше внутриигровых покупок богу внутриигровых покупок!!1!
Спасибо за Ваш комментарий, сегодня запущу небольшое обновление :)
Читай также