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

в 6:20, , рубрики: android, unity, unity ads, unity3d, игра, разработка игр, Разработка под android

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

image

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

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

image

К каждому шару прикреплен скрипт обработки нажатий, обработка реализована своими силами без использования 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 и соответственно скрипт обработки нажатий. Как и в случае с шарами, направление «танца» ёлочки зависит от направления слайда по экрану. Чтобы «танцы» ёлки выглядели мягче было решено разместить за объектом такую же ёлку немного размытую, чтобы задний фон не проглядывал за движущимися элементами ёлки.

image

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

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

image

image

image

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

image

image

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

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

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

Всем спасибо за прочтение статьи. Надеюсь для кого-нибудь она оказалась полезной!

Автор: KrasCoder

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js