Перейдем собственно к самой игре. У меня двое маленьких детей и они часто играют в детские игрушки на телефоне, эдакие «отвлекалки». Естественно они тапают по рекламным баннерам с завидной частотой, чем не мало радуют разработчиков данных игр. Вышеперечисленные обстоятельства натолкнули меня на мысль о создании чего-то подобного, но не на отъе… сь (многие детские игры не блещут аккуратностью), а красивого и приятного глазу. При выборе темы, время года само продиктовало мне решение. Была выбрана новогодняя/рождественская тематика. Геймплей должен был получиться очень простой, но веселый и красочный. Тут начались работы головы на тему того, какие элементы реализовать в игре. В итоге на сцену было решено поместить следующие элементы: новогодние шары, ёлку, деда мороза пролетающего по таймеру и танцующего оленя со снеговиком.
Каждый шар при нажатии должен был воспроизводить праздничную мелодию и получать определенный импульс, соответственно сталкиваясь с остальными шарами. Направление импульса зависит от того куда был произведен слайд по экрану. Каждый объект «шар» состоит из 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. На данный момент есть просмотры и завершенные просмотры, но начислений пока нет. Так что статистику и выводы по монетизации пока дать не смогу. Будем ждать.
Всем спасибо за прочтение статьи. Надеюсь для кого-нибудь она оказалась полезной!
Ссылку на приложение оформлю в виде спойлера:
Комментарии (47)
Laguna_Seca
20.12.2016 23:42Эх ну да ладно. Могу посоветовать группу ducat в вк, бесплатно рекламит инди. По поводу плагина admob — есть у него такая болезнь. Решается обновлением sdk и удалением дублирующихся файлов при совместном использовании с play service.
KrasCoder
21.12.2016 00:16Спасибо! Буду знать где постить рекламу! И с адмобом попробую ещё раз помучаться. Все таки гугл мог сделать интеграцию более человечной.
Leopotam
20.12.2016 23:44Ну и это явное нарушение правил хабра — перепост уже существующей статьи, опубликованной 2 дня назад: http://www.gamedev.ru/projects/forum/?id=221617
KrasCoder
21.12.2016 00:09+1Уже удалил, от хабра не было слышно ничего около недели, вот и отчаялся. Так что статья есть только тут.
KrasCoder
21.12.2016 00:02Спасибо за комменты!!! Очень приятно видеть, что людям не плевать на написанное. Все таки вынужден не согласиться на тему того, что разработчики в соло ничего не могут. Я все таки надеюсь, что смогу достичь успеха.
Writerim
22.12.2016 06:32Никто не сказал, что ничего не могут. Просто в чем то вы будете хуже. И чем вы лучше в одном тем больше будете хуже в других вещах. Если вы хороши в одном, то не стройте иллюзий, что в другой области все элементарно. Не стесняйтесь просить поддержки людей из этих областей. Да — это будет не соло разработка и надо будет работать в команде, согласовывать ваши действия. Но в конечном итоге, когда ваш сын спросит — А что ты папа писал, то вы можете показать ему красивую игру, в которую приятно играть.
paranoik2
21.12.2016 00:34Спасибо за статью! У самого маленькие дети и уже пристают с вопросами как им написать свою игру ) Я пока отбиваюсь ссылаясь на то что это очень долго и сложно. Но мне и самому было бы интересно попробовать )
Скажите сколько времени у Вас заняло освоение Unity 3D (был ли до этого опыт) и написание игры?KrasCoder
21.12.2016 00:41Большое спасибо за комментарий и проявленный интерес! Первоначальное освоение Юнити заняло у меня около недели неспешного изучения по вечерам. Но вот потом возникают различные вопросы и они тоже отъедают время, но мне кажется для получения первых результатов недели вполне хватит. Опыт написания игр был, на C++ OpenGL, но то скорее был макет игры, потом я писал на OpenGL ES под андроид на Eclipse, накидал также пару макетов. Ну и в конце концов решил попробовать Unity 3D. На данный момент мне кажется Юнити это лучшее, что можно найти для разработки под Андроид. Она довольно проста в освоении и предоставляет очень мощный функционал.
mrev1l
21.12.2016 00:42+2Прочитав первый абзац, я определился с победителем в номинации «Самый заносчивый пост 2к16».
А если серьезно, то я вынужден не согласиться с автором.
Ведь по сути мы (разработчики), в идеале, можем быть самодостаточными, — нет, не можем. Либо в очень плохом варианте этой самодостаточности, когда есть плохой программист, плохой QA, плохой дизайнер и тд. Это еще давно было сказано и доказано, что для того, чтобы стать мастером, нужно потрать на дело 10 000 часов. Вы уже потратили? Нет? Ну тогда говорить о самодостаточности как минимум слегка заносчиво.
т.к. практически каждый серьезный программист в состоянии сам создать достойный продукт и заниматься его продажей и продвижением. — В ту же степь. В идеальном мире, это может и было бы так, но у нас тут чтобы продавать и продвигать, нужно знания, никак не связанные с программированием. А вообще-то техническому специалисту это вдвойне сложнее, так как сложно посмотреть на продукт глазами пользователя. Среднестатистического. Например, чтобы понять, что продукт может быть очень классным «под капотом», но весьма неудобным.
Мне кажется с созданием не должно возникнуть серьезных вопросов (кроме художественной части, ибо я не встречал пока прекрасного художника с отличными навыками в программировании), — Я прошу прощения, но когда это программисты были у нас скилловыми художниками?!
а вот бесплатное продвижение продукта, это тайна — по крайней мере сейчас и для меня. — Это не тайна, а миф. Бесплатно ничего не бывает, когда речь заходит о продвижении (если речь идет о чем-то большем, нежели репосты в соц. сетях.
Но опять же, не поймите меня неправильно. Иногда нужно уметь все, — писать код, делать какой-то дизайн, тестировать и тд. Например, когда нужно в максимально быстрые сроки создать прототип, чтобы покрутить его и решать дальше, что со всем этим делать. Но это не в коем случае, не самодостаточность.KrasCoder
21.12.2016 01:01Спасибо за развернутый ответ!
Насчет самодостаточности я может загнул легонько ;) Без художественных скилов реально классный проект создать не реально, но что-то качественное и не уродское все же можно, а это уже преимущество над теми же художниками (они могут рисовать сколько угодно, а вот игруху не запилят ;))) Только не обижайтесь те кто занимается живописью!)
Например, чтобы понять, что продукт может быть очень классным «под капотом» Соглашусь, что разработчику довольно сложно оценить свое детище с точки зрения среднестатистического обывателя. Но ведь у всех у нас есть друзья, семья, знакомые их-то и можно использовать, чтобы получить хоть какую-то картину пригодности продукта для пользователя.
Бесплатно ничего не бывает, когда речь заходит о продвижении Данный постулат я уже освоил и механизмы продвижения все более ясно вырисовываются в голове.
Например, когда нужно в максимально быстрые сроки создать прототип — раз Вы пишете об этом значит имели опыт такого вот создания, а это говорит о Вас как об имеющим довольно богатый опыт специалисте. А раз Вам это удалось значит Вы заменили собой дизайнера, художника и звукорежиссера. Ни один из замененных Вами не в состоянии этого сделать, это факт. Конечно разработчики не могут быть самодостаточными на 100% потому что писать офигенную музыку, рисовать, кодить и писать сценарий невозможно. Но современный мир дает нам много возможностей в плане использования уже готового контента и вот тут открываются большие творческие горизонты. Роль разработчиков в процессе создания игр и вообще приложений в целом, мне кажется, искусственно очень занижена. Т.к. чтобы быть адекватным «девелопером» нужно иметь огромный багаж знаний и опыта.
Но это все братцы мое личное мнение. Спасибо за интерес!
CatrinS
27.12.2016 13:56а это уже преимущество над теми же художниками (они могут рисовать сколько угодно, а вот игруху не запилят ;))) Только не обижайтесь те кто занимается живописью!)
Вот тут вы совсем не правы. Юнити как раз позволяет художникам с нулевым знанием ЯП сделать несложную игру: выглядеть она будет шикарно, а уж как там все внутри плохо работает узнает только специально заглянувший туда программист.
А если программист пишет игру — она будет оптимизирована и быстро работать, иметь немного странный UX (многие программисты не понимают что другие пользователи видят мир по-другому, часто с этим сталкиваюсь на работе), а вот визуальная часть скорее всего будет представлять набор бесплатных картинок, разных по стилю, цветовой гамме и в результате совсем не сочетающихся.KrasCoder
27.12.2016 13:58Вы знаете, в моем кругу общения нет художника-программиста, способного разобраться в юнити, оттуда и выводы. Естественно, художник способный что-то наваять в юнити имеет преимущество над программистом с очень слабыми талантами в графическом мастерстве. Спасибо за интересный комментарий!
k12th
27.12.2016 14:38визуальная часть скорее всего будет представлять набор бесплатных картинок, разных по стилю
Программисту важно показать рабочий прототип, потому что его часть работы в этом и состоит: чтоб мобы кусались, а неписи трепались. Поэтому placeholder art — это лучший выход, если в детстве медведь наступил на, ээ, краски с кисточкой. Надо, конечно, понимать, что это всего лишь прототип и в продакшене надо все перерисовать.
Я вот ничего не могу доделать, потому что внутренний перфекционист не выносит разные не сочетающиеся по стилю картинки, и работа встает, а художника знакомого нету.
CatrinS
27.12.2016 14:52Знакомые художники это не всегда выход, за пополнение портфолио и спасибо работать очень тяжело (так многие начинают, но могут в любой момент слиться из-за денежного заказа, сессии или потому что решили что проект все равно обречен на неудачу и лень его тянуть).
Но ведь можно купить ассет или поискать (условно)бесплатные исходники на freepik и подобных сайтах, так и не зависите ни от кого, и финальная картинка приличная.k12th
27.12.2016 15:00за пополнение портфолио и спасибо работать очень тяжело
Ага. А программистам, копающимся по вечерам в Юнити, наверное, Дед Мороз за работу платит:)
купить ассет или поискать (условно)бесплатные
Вы что-то сами себе противоречите, мне кажется. Ведь купленные ассеты — это и будет набор разных по стилю картинок (купленный ассет будет подходить под игру на 100% если только игру делать под ассет). Только теперь еще и не бесплатно:)
CatrinS
27.12.2016 16:09А программистам, копающимся по вечерам в Юнити, наверное, Дед Мороз за работу платит:)
Свой проект не тянет, он же родной и самый лучший. И вы, программисты, постоянно учите новые фреймворки, технологии, что-то там копаете, юнити попался — и в нем копаетесь :)
1 ассет из фонов, домиков, деревьев, персонажа и всяких меню — весь набор в одном стиле (в сторе Юнити много всего продается). А на условно-бесплатных сайтах можно у одного автора посмотреть что есть, часто в одном стиле работают и иконки/картинки подходят друг к другу (или дорабатываются напильником до нужной стилистики). Но я смотрю с точки зрения человека, который часто использует иллюстратор/фотошоп — берешь рисунок, колдуешь и получаешь то что надо :)
Бесплатно что-то хорошее и нужное получить почти невозможно, обычно это то что «подойдет» под проект, тут не поспорить.k12th
27.12.2016 16:51Ну вот и получаем то, что получаем, чего тут удивительного:)
На самом деле, я говорил о навыке "задавить внутреннего перфекциониста и выдать далекий от идеала, но рабочий результат", которого очень не хватает многим моим знакомым художникам и программистам (и в том числе и мне).
CatrinS
27.12.2016 16:30То что я предложила совсем не панацея, но может очень помочь.
KrasCoder
28.12.2016 02:12Я два дня назад глянул на ассет стор от юнити и волосы дыбом встали :) Там столько всего, что мои планы на следующий проект смешались в жуткую кашу. Простор выбора ассетов с похожей стилистикой просто огромен. А вот завершить проект и выпустить его, а не заниматься самолюьованием/самобичеванием — самое сложное дело. Происходит этого от того, что на старте разработки ты полон энтузиазма, когда реализуешь ключевые моменты — искренне радуешься, но вот потом дело доходит до рутины (правка мелких багов, подправление дизайна, указание авторов контента и прочее. Вот этот этап самый сложный. И надо чётко понимать, что Вы хотите: делать игру или сделать игру, это совсем разные вещи! Спасибо, что делитесь опытом и мнениями!!!
CatrinS
28.12.2016 16:22Меня спасает канбан-доска: разбиваю все на небольшие задачи и дальше главное не забывать заниматься ими.
А для своего развития выбрала только часть создания игры, так что даже рутина (нарезка, ресайз, доки с указанием цвета/размера/сложных кейсов) меня не напрягает, любые задачи в разной степени нравятся, они же часть моей работы :)
С выбором ассета, уверена, сами сможете разобраться, но на всякий случай совет: сделайте маленький диздок, поймете что половина в сторе не подходит, сможете выбирать по стилю из остальных.KrasCoder
28.12.2016 22:10Спасибо за то, что делитесь опытом и даёте действительно удельные советы! Желаю Вам достичь больших успехов в нашем деле!
agentf
21.12.2016 21:37давно было сказано и доказано, что для того, чтобы стать мастером, нужно потрать на дело 10 000 часов
100 отжиманий, 100 пресса, 100 приседаний, 10 км бега, каждый день, 3 года подряд
feudorsam
21.12.2016 01:43-3Прошу прощения, но Дед Мороз никогда не говорил «хо-хо-хо». С этим вопросом к Санте. Я родился в союзе и вообще не понимаю, почему везде Санту лепят…
k12th
21.12.2016 10:26Открою вам маленький секрет: всем пофиг, Санта, Дед Мороз, Святой Николай или вообще
Колотун-АгаЙольский Ниссе. Детей интересуют подарки, детей постарше — вечеринки, совсем взрослые просто наслаждаются ощущением праздника.Сходства важнее различий.
P.S. Я тоже родился в Союзе.
Writerim
Пусть это будет хабросуицид, но я не могу не сказать, что это ужасно! Что статья, что игра.
Я понимаю, что это первая игра. Но можно было же сделать для своих же детей как то аккуратнее, подобрать одну стилизацию. Сделать поменьше звуков, чтобы не ка «японский трип» звучало.
Статью можно было сделать с какой то изюминкой. Разобрать какую то проблему по косточкам. Пусть она одна из 1000, но пользователям было бы интересно читать «детектив» о том как и откуда эта трудность. Как вы ее решали и так далее.
mopsicus
Для первой «игры» пойдет… А вот полезность статьи действительно равна нулю.
Writerim
Чтобы не было вопроса что такое UX и UI
UI — пользователь видит, то что ожидал увидеть.
UX — пользователь должен получить то, что ожидал получить от своих действий.
Сжато звучит как то так.
* в ветку
KrasCoder
Спасибо за коммент, а что не аккуратно в игре? Я реально не вижу того, что бросалось бы в глаза. А музыка чем плоха? 9 праздничных мелодий на шарах. Все таки я бы не стал называть игру ужасной:) Если Вы укажете на явные промахи и представителей примеры того как стоило бы сделать, я обязательно учту в дальнейшем и буду Вам пресного благодарен. Так как цель моя — продолжать совершенствоваться. Спасибо!
Writerim
Звук — Перебивающие друг друга реплики деда Мороза или Санты. Когда идет одна дорожка, то человеку понятно кем она воспроизведена. Когда они накладываются друг на друга, мозг дезориентируется, так как не может понять откуда остальные звуки, кто их делает и так далее. Вроде так пытали в Гуантанамо.
Позиционировать это ка игру — можно с сильной натяжкой. Не видно цели игры. Вот если сказать что это генератор новогодней мелодии, где у каждого шара есть нота или патерн и из них получалась бы симпатичная мелодия, то это больше похоже на то что вы сделали. Тогда встает вопрос — зачем там танцующий синий олень и взрывающиеся мешки подарков.
Для того чтобы вы поняли, что лично у меня вызывает негативную реакцию — Представьте, что вы проснулись в камере тюрьмы. На стене висит телевизор и он начинает показывать куклу, которая говорит вам, что хочет сыграть с вами в игру. Если вы выиграете, то вы свободны, если нет — …, то нет.
Затем телевизор падает на землю и из него выпадают разные вещи — банан, клавиатура, мягко, тепло и Азербайджан. Что с этими вещами делать, почему когда вы дотрагиваетесь до этих вещей играет музыка и как бы повесится.
Это аналогия, чтобы вы понимали как важна такая вещь как UX.
RabraBabr
Отличный кстати сюжет. Можно я сделаю хоррор квест по нему под Oculus Rift? :)
geekandr
UX важен для трехлетнего ребенка который не помнит что было 10 минут назад? Игра вроде для самых маленьких.
KrasCoder
Да, именно для малышей! ;)
chandlerMbing
как папа двухлетнего карапуза могу точно сказать, что помнит и то что было 10 минут назад и то что было 1 час назад. Даже то, что было вчера. Да, внимание конечно переключить можно и это легко и быстро, но они все равно помнят=)