Разработка и публикация первой игры под Android на Unity3D

Доброго времени суток! Вот и закончил я разработку своей первой игры на Unity для Android. Причиной разработки игры послужил анализ вакансий на hh. Стало интересно, отчего же разработчикам игр работодатели готовы платить серьезные суммы. Ведь по сути мы (разработчики), в идеале, можем быть самодостаточными, т.к. практически каждый серьезный программист в состоянии сам создать достойный продукт и заниматься его продажей и продвижением. Мне кажется с созданием не должно возникнуть серьезных вопросов (кроме художественной части, ибо я не встречал пока прекрасного художника с отличными навыками в программировании), а вот бесплатное продвижение продукта, это тайна — по крайней мере сейчас и для меня.



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

Каждый шар при нажатии должен был воспроизводить праздничную мелодию и получать определенный импульс, соответственно сталкиваясь с остальными шарами. Направление импульса зависит от того куда был произведен слайд по экрану. Каждый объект «шар» состоит из AudioClip, спрайта, box collider'a, rigidbody 2D, Distance Joint 2D и LineRendrer'a. На скриншоте проекта можно это хорошо разглядеть. Соответственно rigidbody 2D нужен для придания объекту массы и реализации воздействия гравитации, box collider реализует столкновения, Distace Joint 2D — наша не видимая нить на которой подвешен шар, а LineRenderer занимается отрисовкой нити Distace Joint 2D.



К каждому шару прикреплен скрипт обработки нажатий, обработка реализована своими силами без использования Unity UI.

Вот часть кода реализации обработки тапа по экрану:

 if (Input.touchCount > 0)
        {
           if (Input.GetTouch(0).phase == TouchPhase.Moved)
            {
            Vector3 tmp = Camera.main.ScreenToWorldPoint(new  Vector3(Input.GetTouch(0).position.x, Input.GetTouch(0).position.y, 0));
                hit = Physics2D.Raycast(tmp, tmp);
                if (hit.collider.gameObject == gameObject && hit.distance < 0.1)
                {
                    if (Input.GetTouch(0).deltaPosition.x>0)
                        rb2D.velocity += new Vector2(dspeed, 0f);
                    else
                        rb2D.velocity += new Vector2(-dspeed, 0f);
                    if (Asrc.isPlaying)
                        Asrc.Stop();
                    Asrc.PlayOneShot(aclip);

                 }
            }
        }

Ёлку было решено сделать не простую, а интерактивную. При тапе по ёлке включается музыка, начинает сыпать снежок из звезды и елка начинает танцевать. Ёлка состоит из трех подвижных элементов, связанных между собой Distace Joint 2D. Каждый элемент имеет box collider и соответственно скрипт обработки нажатий. Как и в случае с шарами, направление «танца» ёлочки зависит от направления слайда по экрану. Чтобы «танцы» ёлки выглядели мягче было решено разместить за объектом такую же ёлку немного размытую, чтобы задний фон не проглядывал за движущимися элементами ёлки.



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

Подарки, которые кидает дед мороз являются префабами (я думаю как вызывать к жизни префабы читающий статью кодер знает, и это не урок, а обзорная статья, если кому понадобиться отпишусь подробнее), которые генерируются в рандомном количестве при тапе по деду морозу. При создании подарков надо было как-то реализовать их исчезновение. Исчезновение подарков я реализовал следующим образом: по таймеру включается система частиц, похожая на маленький фейерверк, далее происходит хлопок, подарок исчезает и с места исчезновения вылетают разные(рандомные) спрайты-игрушки. Чтобы подарки не проваливались сквозь «землю» на сцене реализован Edge Collider.







Если Вы дочитали до этого места, то заметили две кнопочки в левом углу экрана, нажатия на эти на эти кнопки вызывают танцующего снеговика и оленя (оба являются префабами), анимации прописывались вручную, у каждого танцора есть по три анимации, при смене анимации танцоры поздравляют пользователя с рождеством. Танец заканчивается уменьшением scale объекта и включением системы частиц. Ничего особенного в реализации танцоров нет, единственное, что хотелось бы заметить: всегда при создании анимации ставьте галочку Quaternion в настройках интерполяции при анимации вращения.





Видео Геймплея (прошу прощения за качество, на самом деле игра не тормозит, но вот с запущенной утилитой от гугл игр для записи геймплея все тормознулось):


Изображения и музыку под лицензией CC можно найти тут: openclipart.org (изображения) и incompetech.com (музыка от Kevin MacLeod, лицензия CC attribution 3.0).

Теперь вкратце расскажу про подводные камни паблишинга, хотя они не такие уж и подводные, но камни. При разработке проекта в него вшивается дебаг ключ по умолчанию, так вот, с таким ключом нельзя публиковать приложение в Google Play. Приложение перед публикацией необходимо подписать Вашим релиз ключом, делается это все стандартными средствами Unity. Есть статьи в которых данное действо описано очень подробно, так что не буду на этом подробно останавливаться. Еще один страшный камень это указание цен на приложение в маркете для разных стран, приготовьтесь попыхтеть на этом этапе, хоть и ничего сложного не было, но нервы этот процесс потрепал. Самое главное: не ленитесь писать боольшое адекватное описание вашего продукта, это залог успеха на начальном этапе, если вы не используете никакие методы продвижения. Монетизировать игру я решил с помощью Unity Ads, очень легко встраивается и хорошо работает. AdMob плагин при встраивании начал ругаться на SDK, на Java, я так и не одолел его ругань, а декабрь подходил очень быстро в итоге я остался на UnityAds. На данный момент есть просмотры и завершенные просмотры, но начислений пока нет. Так что статистику и выводы по монетизации пока дать не смогу. Будем ждать.

Всем спасибо за прочтение статьи. Надеюсь для кого-нибудь она оказалась полезной!
Ссылку на приложение оформлю в виде спойлера:
Ссылка на приложение в Google Play
Метки:
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 47
  • +10
    не кажется с созданием не должно возникнуть серьезных вопросов (кроме художественной части
    В вашем случае имеет место быть.

    Пусть это будет хабросуицид, но я не могу не сказать, что это ужасно! Что статья, что игра.

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

    Статью можно было сделать с какой то изюминкой. Разобрать какую то проблему по косточкам. Пусть она одна из 1000, но пользователям было бы интересно читать «детектив» о том как и откуда эта трудность. Как вы ее решали и так далее.
    • +3
      Для первой «игры» пойдет… А вот полезность статьи действительно равна нулю.
      • 0
        Чтобы не было вопроса что такое UX и UI
        UI — пользователь видит, то что ожидал увидеть.
        UX — пользователь должен получить то, что ожидал получить от своих действий.

        Сжато звучит как то так.

        * в ветку
      • 0

        Спасибо за коммент, а что не аккуратно в игре? Я реально не вижу того, что бросалось бы в глаза. А музыка чем плоха? 9 праздничных мелодий на шарах. Все таки я бы не стал называть игру ужасной:) Если Вы укажете на явные промахи и представителей примеры того как стоило бы сделать, я обязательно учту в дальнейшем и буду Вам пресного благодарен. Так как цель моя — продолжать совершенствоваться. Спасибо!

        • +4
          Звук — Перебивающие друг друга реплики деда Мороза или Санты. Когда идет одна дорожка, то человеку понятно кем она воспроизведена. Когда они накладываются друг на друга, мозг дезориентируется, так как не может понять откуда остальные звуки, кто их делает и так далее. Вроде так пытали в Гуантанамо.

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

          Для того чтобы вы поняли, что лично у меня вызывает негативную реакцию — Представьте, что вы проснулись в камере тюрьмы. На стене висит телевизор и он начинает показывать куклу, которая говорит вам, что хочет сыграть с вами в игру. Если вы выиграете, то вы свободны, если нет — …, то нет.
          Затем телевизор падает на землю и из него выпадают разные вещи — банан, клавиатура, мягко, тепло и Азербайджан. Что с этими вещами делать, почему когда вы дотрагиваетесь до этих вещей играет музыка и как бы повесится.
          Это аналогия, чтобы вы понимали как важна такая вещь как UX.
          • +2
            Представьте, что вы проснулись в камере тюрьмы.

            Отличный кстати сюжет. Можно я сделаю хоррор квест по нему под Oculus Rift? :)
            • 0
              UX важен для трехлетнего ребенка который не помнит что было 10 минут назад? Игра вроде для самых маленьких.
              • 0
                Да, именно для малышей! ;)
                • 0
                  как папа двухлетнего карапуза могу точно сказать, что помнит и то что было 10 минут назад и то что было 1 час назад. Даже то, что было вчера. Да, внимание конечно переключить можно и это легко и быстро, но они все равно помнят=)
          • 0

            Эх ну да ладно. Могу посоветовать группу ducat в вк, бесплатно рекламит инди. По поводу плагина admob — есть у него такая болезнь. Решается обновлением sdk и удалением дублирующихся файлов при совместном использовании с play service.

            • 0

              Спасибо! Буду знать где постить рекламу! И с адмобом попробую ещё раз помучаться. Все таки гугл мог сделать интеграцию более человечной.

            • 0
              Ну и это явное нарушение правил хабра — перепост уже существующей статьи, опубликованной 2 дня назад: http://www.gamedev.ru/projects/forum/?id=221617
              • +1

                Уже удалил, от хабра не было слышно ничего около недели, вот и отчаялся. Так что статья есть только тут.

              • 0

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

                • 0
                  Никто не сказал, что ничего не могут. Просто в чем то вы будете хуже. И чем вы лучше в одном тем больше будете хуже в других вещах. Если вы хороши в одном, то не стройте иллюзий, что в другой области все элементарно. Не стесняйтесь просить поддержки людей из этих областей. Да — это будет не соло разработка и надо будет работать в команде, согласовывать ваши действия. Но в конечном итоге, когда ваш сын спросит — А что ты папа писал, то вы можете показать ему красивую игру, в которую приятно играть.
                • 0
                  Спасибо за статью! У самого маленькие дети и уже пристают с вопросами как им написать свою игру ) Я пока отбиваюсь ссылаясь на то что это очень долго и сложно. Но мне и самому было бы интересно попробовать )

                  Скажите сколько времени у Вас заняло освоение Unity 3D (был ли до этого опыт) и написание игры?
                  • 0
                    Большое спасибо за комментарий и проявленный интерес! Первоначальное освоение Юнити заняло у меня около недели неспешного изучения по вечерам. Но вот потом возникают различные вопросы и они тоже отъедают время, но мне кажется для получения первых результатов недели вполне хватит. Опыт написания игр был, на C++ OpenGL, но то скорее был макет игры, потом я писал на OpenGL ES под андроид на Eclipse, накидал также пару макетов. Ну и в конце концов решил попробовать Unity 3D. На данный момент мне кажется Юнити это лучшее, что можно найти для разработки под Андроид. Она довольно проста в освоении и предоставляет очень мощный функционал.
                  • +2
                    Прочитав первый абзац, я определился с победителем в номинации «Самый заносчивый пост 2к16».
                    А если серьезно, то я вынужден не согласиться с автором.

                    Ведь по сути мы (разработчики), в идеале, можем быть самодостаточными, — нет, не можем. Либо в очень плохом варианте этой самодостаточности, когда есть плохой программист, плохой QA, плохой дизайнер и тд. Это еще давно было сказано и доказано, что для того, чтобы стать мастером, нужно потрать на дело 10 000 часов. Вы уже потратили? Нет? Ну тогда говорить о самодостаточности как минимум слегка заносчиво.

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

                    Мне кажется с созданием не должно возникнуть серьезных вопросов (кроме художественной части, ибо я не встречал пока прекрасного художника с отличными навыками в программировании), — Я прошу прощения, но когда это программисты были у нас скилловыми художниками?!

                    а вот бесплатное продвижение продукта, это тайна — по крайней мере сейчас и для меня. — Это не тайна, а миф. Бесплатно ничего не бывает, когда речь заходит о продвижении (если речь идет о чем-то большем, нежели репосты в соц. сетях.

                    Но опять же, не поймите меня неправильно. Иногда нужно уметь все, — писать код, делать какой-то дизайн, тестировать и тд. Например, когда нужно в максимально быстрые сроки создать прототип, чтобы покрутить его и решать дальше, что со всем этим делать. Но это не в коем случае, не самодостаточность.
                    • 0
                      Спасибо за развернутый ответ!
                      Насчет самодостаточности я может загнул легонько ;) Без художественных скилов реально классный проект создать не реально, но что-то качественное и не уродское все же можно, а это уже преимущество над теми же художниками (они могут рисовать сколько угодно, а вот игруху не запилят ;))) Только не обижайтесь те кто занимается живописью!)
                      Например, чтобы понять, что продукт может быть очень классным «под капотом» Соглашусь, что разработчику довольно сложно оценить свое детище с точки зрения среднестатистического обывателя. Но ведь у всех у нас есть друзья, семья, знакомые их-то и можно использовать, чтобы получить хоть какую-то картину пригодности продукта для пользователя.
                      Бесплатно ничего не бывает, когда речь заходит о продвижении Данный постулат я уже освоил и механизмы продвижения все более ясно вырисовываются в голове.
                      Например, когда нужно в максимально быстрые сроки создать прототип — раз Вы пишете об этом значит имели опыт такого вот создания, а это говорит о Вас как об имеющим довольно богатый опыт специалисте. А раз Вам это удалось значит Вы заменили собой дизайнера, художника и звукорежиссера. Ни один из замененных Вами не в состоянии этого сделать, это факт. Конечно разработчики не могут быть самодостаточными на 100% потому что писать офигенную музыку, рисовать, кодить и писать сценарий невозможно. Но современный мир дает нам много возможностей в плане использования уже готового контента и вот тут открываются большие творческие горизонты. Роль разработчиков в процессе создания игр и вообще приложений в целом, мне кажется, искусственно очень занижена. Т.к. чтобы быть адекватным «девелопером» нужно иметь огромный багаж знаний и опыта.
                      Но это все братцы мое личное мнение. Спасибо за интерес!

                      • 0
                        а это уже преимущество над теми же художниками (они могут рисовать сколько угодно, а вот игруху не запилят ;))) Только не обижайтесь те кто занимается живописью!)


                        Вот тут вы совсем не правы. Юнити как раз позволяет художникам с нулевым знанием ЯП сделать несложную игру: выглядеть она будет шикарно, а уж как там все внутри плохо работает узнает только специально заглянувший туда программист.
                        А если программист пишет игру — она будет оптимизирована и быстро работать, иметь немного странный UX (многие программисты не понимают что другие пользователи видят мир по-другому, часто с этим сталкиваюсь на работе), а вот визуальная часть скорее всего будет представлять набор бесплатных картинок, разных по стилю, цветовой гамме и в результате совсем не сочетающихся.
                        • 0
                          Вы знаете, в моем кругу общения нет художника-программиста, способного разобраться в юнити, оттуда и выводы. Естественно, художник способный что-то наваять в юнити имеет преимущество над программистом с очень слабыми талантами в графическом мастерстве. Спасибо за интересный комментарий!
                          • 0
                            Пожалуйста :) Необязательно ведь быть художником чтобы сделать красивые картинки, можно симулировать: берете простые туториалы как тут и вперед!
                          • 0
                            Мне самому довольно сложно представить игру глазами обывателя.
                            • 0
                              визуальная часть скорее всего будет представлять набор бесплатных картинок, разных по стилю

                              Программисту важно показать рабочий прототип, потому что его часть работы в этом и состоит: чтоб мобы кусались, а неписи трепались. Поэтому placeholder art — это лучший выход, если в детстве медведь наступил на, ээ, краски с кисточкой. Надо, конечно, понимать, что это всего лишь прототип и в продакшене надо все перерисовать.


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

                              • 0
                                Знакомые художники это не всегда выход, за пополнение портфолио и спасибо работать очень тяжело (так многие начинают, но могут в любой момент слиться из-за денежного заказа, сессии или потому что решили что проект все равно обречен на неудачу и лень его тянуть).

                                Но ведь можно купить ассет или поискать (условно)бесплатные исходники на freepik и подобных сайтах, так и не зависите ни от кого, и финальная картинка приличная.
                                • 0
                                  за пополнение портфолио и спасибо работать очень тяжело

                                  Ага. А программистам, копающимся по вечерам в Юнити, наверное, Дед Мороз за работу платит:)


                                  купить ассет или поискать (условно)бесплатные

                                  Вы что-то сами себе противоречите, мне кажется. Ведь купленные ассеты — это и будет набор разных по стилю картинок (купленный ассет будет подходить под игру на 100% если только игру делать под ассет). Только теперь еще и не бесплатно:)

                                  • 0
                                    А программистам, копающимся по вечерам в Юнити, наверное, Дед Мороз за работу платит:)

                                    Свой проект не тянет, он же родной и самый лучший. И вы, программисты, постоянно учите новые фреймворки, технологии, что-то там копаете, юнити попался — и в нем копаетесь :)

                                    1 ассет из фонов, домиков, деревьев, персонажа и всяких меню — весь набор в одном стиле (в сторе Юнити много всего продается). А на условно-бесплатных сайтах можно у одного автора посмотреть что есть, часто в одном стиле работают и иконки/картинки подходят друг к другу (или дорабатываются напильником до нужной стилистики). Но я смотрю с точки зрения человека, который часто использует иллюстратор/фотошоп — берешь рисунок, колдуешь и получаешь то что надо :)
                                    Бесплатно что-то хорошее и нужное получить почти невозможно, обычно это то что «подойдет» под проект, тут не поспорить.
                                    • 0

                                      Ну вот и получаем то, что получаем, чего тут удивительного:)


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

                                    • 0
                                      То что я предложила совсем не панацея, но может очень помочь.
                                      • 0

                                        Я два дня назад глянул на ассет стор от юнити и волосы дыбом встали :) Там столько всего, что мои планы на следующий проект смешались в жуткую кашу. Простор выбора ассетов с похожей стилистикой просто огромен. А вот завершить проект и выпустить его, а не заниматься самолюьованием/самобичеванием — самое сложное дело. Происходит этого от того, что на старте разработки ты полон энтузиазма, когда реализуешь ключевые моменты — искренне радуешься, но вот потом дело доходит до рутины (правка мелких багов, подправление дизайна, указание авторов контента и прочее. Вот этот этап самый сложный. И надо чётко понимать, что Вы хотите: делать игру или сделать игру, это совсем разные вещи! Спасибо, что делитесь опытом и мнениями!!!

                                        • 0
                                          Меня спасает канбан-доска: разбиваю все на небольшие задачи и дальше главное не забывать заниматься ими.
                                          А для своего развития выбрала только часть создания игры, так что даже рутина (нарезка, ресайз, доки с указанием цвета/размера/сложных кейсов) меня не напрягает, любые задачи в разной степени нравятся, они же часть моей работы :)

                                          С выбором ассета, уверена, сами сможете разобраться, но на всякий случай совет: сделайте маленький диздок, поймете что половина в сторе не подходит, сможете выбирать по стилю из остальных.
                                          • 0

                                            Спасибо за то, что делитесь опытом и даёте действительно удельные советы! Желаю Вам достичь больших успехов в нашем деле!

                            • 0
                              давно было сказано и доказано, что для того, чтобы стать мастером, нужно потрать на дело 10 000 часов

                              100 отжиманий, 100 пресса, 100 приседаний, 10 км бега, каждый день, 3 года подряд
                            • –3
                              Прошу прощения, но Дед Мороз никогда не говорил «хо-хо-хо». С этим вопросом к Санте. Я родился в союзе и вообще не понимаю, почему везде Санту лепят…
                              • 0

                                Открою вам маленький секрет: всем пофиг, Санта, Дед Мороз, Святой Николай или вообще Колотун-Ага Йольский Ниссе. Детей интересуют подарки, детей постарше — вечеринки, совсем взрослые просто наслаждаются ощущением праздника.Сходства важнее различий.


                                P.S. Я тоже родился в Союзе.

                                • –5
                                  Согласен. Но это не означает, что детям надо навязывать западную культуру.
                                  • +1
                                    А в чем принципиальное отличие?
                                    Что в ней плохого?
                                    • 0
                                      Я не хотел делать именно прозападное приложение, просто расчет был на глобальный рынок.
                                      • 0
                                        Да. Я понял. Просто зацепился за Деда Мороза в Вашей статье. Прошу прощения за оффтоп
                                      • 0
                                        Дело не в том, что плохого или хорошего, а в том, что надо бы и свою культуру сохранять, а не только распространять импортную.
                                        • 0

                                          Подумаю над локализацией проекта… Но что характерного говорит наш Дед Мороз? Я не знаю его слогана. И ещё

                                • +1
                                  Картинко не грузиццо :(
                                  • 0
                                    А скрины только я не вижу?
                                    • 0
                                      Странно, на компе не видно, а с мобилки норм, пофиксю.
                                      • 0
                                        Скрины пофиксил, хостинг на котором они лежали обиделся на нагрузку. Вот так вот))
                                      • 0
                                        Хорошая статья. Видно внутреннее устройство простого приложения. Напишите статистику по загрузкам и результатам по рекламе — очень интересно.
                                        • 0
                                          Статистику соберу к концу декабря и конечно покажу её тут. Спасибо!

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