СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

| сохранено

H Stacks. История одной игры в черновиках

Когда-то давно у меня был телефон Siemens M55. И дизайн у него был приятный, и надёжностью радовал, и игрушек для него много можно было найти (не то что ко многим другим, не столь популярным моделям). Одна игрушка особенно полюбилась — Stack Attack 2 Pro называлась. Играл я в неё в любую свободную минуту. И по дороге на работу, и вместо чтения этикеток на освежителях воздуха.

Stack Attack


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

И всё хорошо было в этой игре, кроме того, что её не было на современных телефонах/смартфонах. Пара кривых поделок, которые даже близко не ползали рядом со Stack Attack, не считаются. Сделаны они были явно без любви к оригиналу. Пришлось спасать ситуацию.

Хочешь сделать что-то хорошо — сделай это сам


Так как я некоторое время работаю с Unity, было решено использовать его. Тем более, что в ней появился режим 2D и его давно хотелось пощупать, да всё времени не было. Дело оставалось за малым — графика, озвучка и собственно реализация.

Графика

Для графики было решено использовать pixel art, чтобы подчеркнуть «олдскульность» игры. Несколько попыток поработать с фрилансерами принесли только разочарование о потраченном впустую времени. Очередным вечером, рассказывая очередному pixel-art художнику как рисуется pixel-art, я вдруг понял, что мне намного проще всё сделать самому. Взял из холодильника пиво и запустил Photoshop. К утру были готовы основные наброски, которые в дальнейшем лишь немного дорабатывались. Думаю, что для первого опыта рисования получилось вполне сносно.

Получилось как-то так

Озвучка

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

Разработка

Боюсь, что тут ничего уникального и любопытного рассказать не смогу. Советую почитать Основы создания 2D персонажа в Unity 3D 4.3 и Custom font в Unity3d, они мне очень помогли в процессе, сэкономив при этом кучу времени.

Любовь приходит и уходит, а кушать хочется всегда


И удовольствие от работы совсем не утоляет голод. Монетизацию решено было выбрать стандартную — бесплатное скачивание с внутриигровой рекламой, которую можно отключить. Это даёт возможность всем желающим ознакомиться с игрой и, если она не понравится, то просто её удалить, не потратив ни копейки.

Как показал предыдущий опыт, iAd очень просто подключается в Unity и имеет в основном хороший eCPM. К сожалению, это сильно портится двумя неприятными минусами. После прохождения проверки и публикации приложения в iTunes Store оно отправляется на проверку в iAd. Время проверки труднопрогнозируемо и статус проверки нигде не отображается. Предыдущий опыт показал что этот процесс может затянуться аж на пять дней. Всё это время в игре не показывалась реклама и, естественно, желающих отключить её не нашлось. Но и после проверки в iAd реклама стала показываться далеко не всем, и это второй существенный минус — охват стран сетью не такой уж и всеобъемлющий. Игроки не видящие рекламы не будут её отключать. Вариант номер два это AdMob. Охват стран очень хороший, но eCPM после iAd расстраивает.

Как результат был придуман хитрый велосипед — по-умолчанию показываем iAd, если в течение 15 секунд не загрузился никакой баннер, то показываем AdMob. Велосипед был опробован на другом проекте и успешно заработал.

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

Избранное содержимое файла CameraScript.cs, который прикреплён к камере.

public class CameraScript : MonoBehaviour
{
	public string AdmobBannerId = "ca-app-pub-*****/*****";

	ADBannerView iAd = null;
	
	void Start ()
	{
		iAd = new ADBannerView(ADBannerView.Type.Banner, ADBannerView.Layout.Top);
		iAd.visible = true;
		StartCoroutine(checkIAD());
	}
	
	IEnumerator checkIAD()
	{
		yield return new WaitForSeconds(15f);
		if (!iAd.loaded) {
			iAd.visible = false;
			AdMobPlugin.CreateBannerView(AdmobBannerId, AdMobPlugin.AdSize.SmartBanner, true);
			AdMobPlugin.RequestBannerAd(false, "{}");
		}
	}
}

И всё бы хорошо, если бы не пара моментов:

При каждом обновлении баннера игра существенно подтормаживает (iPhone 4, iOS 7.1), что очень сильно портит впечатление от игры и повышает шанс получить ящиком по голове. Портить игру ради баннеров совсем не хотелось и пришлось заняться оптимизацией производительности в надежде на то, что тогда подгрузка баннеров не будет влиять на процесс игры. Это получилось лишь отчасти, стало заметно не так сильно, но продолжало мешать играть.

Второй момент был в том, что запустить игру для Android оказалось не так то просто. С одной стороны, Unity изачально это может, с другой — требуются соответствующие версии плагинов. Это всё сильно усложняет поддержку довольно простой игры для двух платформ.

Ну так и?

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

Хотя почему это «будет»? Она вполне себе уже есть. Прямую ссылку давать не буду, но догадаться по какому названию её искать в App Store, думаю, будет не сильно сложно. С Google Play есть некоторые заминки, но надеюсь, что скоро и под Android девайсами поиграть получится.

Итого


На разработку игры с технической точки зрения потрачен месяц разработки и $5 (хотя тут, конечно, смотря как считать — аккаунт разработчика за $99 был куплен ранее и не под эту игру).

Unity Free — $0
AdMob Plugin (больше не используется) — $0
U3DXT Basic (для внутриигровой покупки, больше не используется) — $0
Rate App for iOS (честно говоря просто лениво было свою реализацию делать) — $5
NerdFlurry — $0

Один месяц работы, доставившей мне кучу удовольствия, и я снова могу играть в свою любимую игру. Но пора возвращаться к основной работе. А вы пока можете глянуть небольшой тизер игры (один день на производство, затраты $0).

комментарии (15)

+2
Talyutin ,  

Графика очень неочень получилась в итоге. А так да, еще с C45 помню ее, черно-белую:)

0
aleksandr_lis ,  

У меня C55 был с чёрно-белой, не стал уже об этом писать.

А что не понравилось в графике?

+3
coder1cv8 ,  

Это не пиксель арт.

0
aleksandr_lis ,  

Хм, а это например пиксель арт?

+2
Useless_guy ,  

Сутуло-арт

+1
stasxp ,  

Фон уж больно сильно удручает. Он белый. Но вы молодец, так держать. Сразу вспомнил детство. Я тоже НЕ читал этикетки, когда появилась эта игрушка =)

0
r1zar ,   * (был изменён)

NerdFlurry распространяется под лицензией LGPL. Она, если не путаю, не совместима с App Store. ЕМНИП, приложения с использованием LGPL или не пропускают или выпиливают со временем. Советую почитать побольше на эту тему, и заменить библиотеку на свою, тем более она пишется за пару часов.

0
aleksandr_lis ,  

Хм, не обратил на этот момент внимание. Поизучаю вопрос и если это на самом деле так, то конечно NerdFlurry придётся убрать.

+3
axeax ,  

простите… не могу удержаться… но как так получилось что ЭТО тормозило от показа рекламы?

0
aleksandr_lis ,  

Не от показа, а в момент загрузки нового баннера. И не тормозило и подтормаживало на короткое время. Меньше секунды, но динамику это нарушало. К сожалению у меня не Unity Pro и профайлер мне недоступен, поэтому я не могу сказать как так получалось.

–2
axeax ,  

Просто такое пишется «в 30 строк», зачем ради этого тащить целое unity, я не понимаю. Игра действительно отличная тут я молчу… но вот подход…

0
+1 –1
aleksandr_lis ,  

Да, Про Unity вы наверняка правы и для следующей игры я планирую попробовать Cocos2d-x.

0
murr ,   * (был изменён)
Как результат был придуман хитрый велосипед — по-умолчанию показываем iAd, если в течение 15 секунд не загрузился никакой баннер, то показываем AdMob. Велосипед был опробован на другом проекте и успешно заработал.


Эта техника используется достаточно широко, но лучше иметь возможность более гибко управлять рекламой, например через Ad Network Mediation от Гугла

Не от показа, а в момент загрузки нового баннера. И не тормозило и подтормаживало на короткое время. Меньше секунды, но динамику это нарушало.

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

Надеюсь вас не обидит, но попытки экономии на всем, особенно на графике, очень сильно снижают ваши (и так призрачные, как инди) шансы на прибыль от продукта.
0
aleksandr_lis ,  

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

0
murr ,  

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