Оффтоп Лена Очкова
3 115

«Разработка для Apple Watch — это игра в ограничения»

Бывший руководитель мобильных проектов Mail.Ru Group о разработке игр для «умных» часов

В закладки

Константин Сахнов, научный руководитель программы«Менеджмент игровых интернет проектов» Высшей школы бизнес-информатики НИУ ВШЭ и бывший руководитель мобильных проектов Mail.Ru Group, рассказал vc.ru о своем опыте создания приложения для Apple Watch и дал несколько советов по разработке, связанных с особенностями «умных» часов.

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

Новый свободный рынок

Анализируя рынок «умных» часов, мы разрабатывали игру «Эволюция: Герои Утопии». К тому моменту она уже успешно преодолела Vertical Slice (этап создания игры, на котором можно продемонстрировать базовый игровой процесс). Именно к ней и делалась версия для часов.

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

Неожиданный эксперимент

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

Когда мы начинали разрабатывать игру для часов, на рынке была только WatchOS 1 — операционная система с крайне ограниченной функциональностью. Следующая версия системы недалеко ушла от своей предшественницы. Главное, что нужно понимать, — приложения для часов не являются самостоятельным продуктом. Они поставляются только как дополнение к мобильной версии и для их работы нужно, чтобы игра была установлена на телефоне.

Уникальность игрового процесса

«Герои Утопии» — это кликер. В играх такого жанра главной механикой является постоянное развитие персонажей. Игрок наращивает свою мощь экспоненциально, совершая однотипные действия. Идеальный жанр для портирования на часы.

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

Особенности платформы

Сейчас в сети уже достаточно обзоров на Apple Watch, их операционную систему и средства разработки. Не буду заострять на этом внимание. Но для тех, кто еще не успел ознакомиться с этой темой, резюмирую: разработка для Apple Watch — это игра в ограничения. Ограничения будут подстерегать геймдизайнера везде: от размера экрана и доступных ему средств разработки GUI до производительности и полной зависимости часов от телефона.

Постараюсь дать лишь ряд практических советов, которые позволят вам сэкономить время.

Единый графический пакет

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

Системная область

Тут как в Warcraft: «Всегда должен быть Король Лич». Черную полоску вверху экрана с индикатором времени убрать невозможно, но ее вполне можно приспособить под свои цели. Например, выводить туда заголовок экрана. Аналогично со многими другими системными элементами, такими как индикаторы пейджинга: нельзя сделать им кастомный фон или заменить их на свои картинки.

Покадровая анимация

Набор инструментов для создания анимаций на WatchOS 2 очень ограничен. Это покадровая смена анимации, примитивные движения объекта по прямой из точки А в точку В, масштабирование и альфа-канал.

Большой объем основной версии приложения

Так как версия для часов является своего рода аддоном, простите за грубое сравнение, то разработчик поставляет ее вшитой в основной дистрибутив игры. Будьте готовы увидеть, как растет объем приложения, который так хочется уместить в заветные 100 Мб. Одно из решений проблемы — докачка контента с сервера с помощью мобильного приложения при первом запуске игры на часах. Важно понимать, что докачать версию для часов целиком невозможно — речь идет лишь о загрузке ее контента. К счастью, именно он и занимает основной объем.

Оптимизация графики

С графическим контентом на часах работать можно и нужно. К примеру, в нашем кликере основной вес приложения пришелся на монстров и задники. Первых мы сжали, перейдя от PNG-24 к PNG-8, вторых — высокой компрессией JPEG. Также можно экономить за счет уменьшения размеров изображения. Спасибо, кэп.

Борьба за производительность

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

Элементы управления и интерфейсы. Никаких мультитачей и кастомной обработки управления. Все, что есть в вашем распоряжении для создания удобного GUI, — два типа интерфейсов (Page based и Hierarchical) и возможность показывать кастомные всплывающие окна, спасающие в самых неожиданных ситуациях.

Синхронизация контента

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

Здесь важно не забывать три вещи:

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

Стабильность

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

Геймплей кликера

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

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

Версия для часов получила три элемента геймплея:

  1. Убийство монстров. Ну конечно. Кликать по монстрам в кликере — а как же иначе? Здесь важно отметить, что на часах мы дали игроку убивать только монстров. Он не продвигается по прогрессу сюжета, не вызывает диалоги и не сражается с боссом. Эти ограничения продиктованы скоростью клика и размером экрана, на котором совершенно некомфортно читать текст. Играя на планшете или смартфоне, обычный игрок использует сразу несколько пальцев, а по маленькому экрану часов тремя пальцами попасть затруднительно. Об использовании двух рук говорить не приходится.
  2. Прокачка спутников. Этот элемент был перенесен практически полностью, за исключением эволюции, которая требует убийства боссов и отсутствия возможности читать описания героев и их способностей.
  3. Сбор офлайн-награды. И это очень важный момент. Запустить игру на часах, которые постоянно на руке, чуть проще, чем лезть в карман за телефоном и дожидаться загрузки приложения. Кликнуть на иконку приложения на часах и забрать награду получается быстро и удобно.

Вместо выводов

В заключение дам последний совет: если после всего прочитанного вы все же решились делать игру на часах, позаботьтесь не только о разработке, но и об информировании игрока. Установка игры на часы — непривычный процесс, к которому еще не привыкли даже обладатели часов. Тем более что факт наличия у вашей игры версии для Apple Watch не является для них чем-то само собой разумеющимся.

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

Как говорил Нер'зул и многие до него, не ошибается тот, кто ничего не делает. Дерзайте.


Если вы хотите написать материал для рубрики «Рынок игр», рассказать о разработке своей игры или кейсе её роста, присылайте материал на games@vc.ru.

#Рынок_игр #умные_часы #Apple_Watch #приложения_для_Apple_Watch #как_разрабатывать_под_apple_watch

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Лена Очкова", "author_type": "self", "tags": ["\u0443\u043c\u043d\u044b\u0435_\u0447\u0430\u0441\u044b","\u0440\u044b\u043d\u043e\u043a_\u0438\u0433\u0440","\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f_\u0434\u043b\u044f_apple_watch","\u043a\u0430\u043a_\u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c_\u043f\u043e\u0434_apple_watch","gamedev","apple_watch"], "comments": 17, "likes": 12, "favorites": 1, "is_advertisement": false, "subsite_label": "flood", "id": 12795, "is_wide": true }
00
дни
00
часы
00
мин
00
сек
(function(){ var banner = document.querySelector('.teaserSberbank'); var isAdsDisabled = document.querySelector('noad'); if (!isAdsDisabled){ var countdownTimer = null; var timerItem = document.querySelectorAll('[data-sber-timer]'); var seconds = parseInt('15395' + '50799') - now(); function now(){ return Math.round(new Date().getTime()/1000.0); } function timer() { var days = Math.floor(seconds / 24 / 60 / 60); var hoursLeft = Math.floor((seconds) - (days * 86400)); var hours = Math.floor(hoursLeft / 3600); var minutesLeft = Math.floor((hoursLeft) - (hours * 3600)); var minutes = Math.floor(minutesLeft / 60); var remainingSeconds = seconds % 60; if (days < 10) days = '0' + days; if (hours < 10) hours = '0' + hours; if (minutes < 10) minutes = '0' + minutes; if (remainingSeconds < 10) remainingSeconds = '0' + remainingSeconds; if (seconds <= 0) { clearInterval(countdownTimer); } else { timerItem[0].textContent = days; timerItem[1].textContent = hours; timerItem[2].textContent = minutes; timerItem[3].textContent = remainingSeconds; seconds -= 1; } } timer(); countdownTimer = setInterval(timer, 1000); } else { banner.style.display = 'none'; } })();
{ "id": 12795, "author_id": 32927, "diff_limit": 1000, "urls": {"diff":"\/comments\/12795\/get","add":"\/comments\/12795\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/12795"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199791 }

17 комментариев 17 комм.

Популярные

По порядку

Написать комментарий...
1

Константин спасибо за статью . Полезный Опыт .
P.S Удачи Вам и хороших показателей проекты

Ответить
0

"проекту"

Ответить
1

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

Ответить
1

Интересно, жду развития событий с нетерпением))) Уважаемая редакция? Прошу, Вас, к следующему выпуску прикрепить информацию о том, как это отразится на акциях и торгах! Благодарю!:wave:

Ответить
0

Сам кликер уже показал хорошие цифры и на софтлонче и после. Конечно, на старте цифры всегда лучше) но пока ретеншн 2,7 выглядят выше всех ожиданий.
Как Вы подметили, ждём развития событий =)

Ответить
0

Константин, а Android Wear и Tizen не рассматривали?

Ответить
0

Пока нет. Но при разработке заложились, что версия для Aaple Watch может быть не единственной для носимых устройств. Но это скорее на всякий случай,

Ответить
0

И Тизен, и Wear менее ограничены, чем Watch, и, как по мне, при наличии приложения под Android наручный девайс может стать более удобным контроллером для игры. Но в данном случае интересует именно причина отказа от поддержки этих платформ. Было какое-то обоснование? Или просто не рассматривали такую возможность?

Ответить
1

Причины просты: перед нами стояли сжатые сроки, требующие окончить разработку к концу года. В то же время, было много вопросов, связанных с новым для нас рынком часов. А программисты Android были полностью заняты разработкой мобильной версии под эту платформу. Поэтому мы решили сосредоточиться на Apple Watch. В дальнейшем не исключён запуск и на аднроидных часах.

Ответить
0

Примерно тоже самое я писал год назад про свою игру для Apple Watch http://apptractor.ru/develop/istoriya-uspeha-movie-blocks.html.

Миллионы не заработал

К слову сказать, рынок игр для Apple Watch все еще в зачаточном состоянии.

Ответить
0

Спасибо за ссылку. Динамику рынка предсказывать не стану, но продажи часов в штатах худо бедно идут. Надежда всегда есть) А вот что касается монетизации игр на носимых устройствах, то тут ситуация ещё интересней.

Ответить
0

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

Ответить
0

WatchOS3 - это хорошее дело. Так же как состоявшийся осенью релиз WatchOS2 стал шагом вперёд по сравнению с первой версией. Но это увы не снимает вопросов к железу.

Ответить
0

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

Ответить
0

А дело в том, что на часах долго никто не играет. Я сам носил часы, "вживаясь в роль". Собирал фидбек с пользователей. Это очень короткие сессии.
Конкретно в кликере, как я и написал в статье, очень удобно использовать часы для сбора оффлайн награды.

Ответить
0

И Тизен, и Wear менее ограничены, чем Watch, и, как по мне, при наличии приложения под Android наручный девайс может стать более удобным контроллером для игры. Но в данном случае интересует именно причина отказа от поддержки этих платформ. Было какое-то обоснование? Или просто не рассматривали такую возможность?

Ответить
0

Сорри, не так запостил вопрос.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Хакеры смогли обойти двухфакторную
авторизацию с помощью уговоров
Подписаться на push-уведомления