Первый опыт разработки игры для Apple Watch

от автора

Всем привет! В своей статье я хочу рассказать о опыте разработки игры для Apple Watch. Игра называется Space Beaver(Бобер и Космос). Она также доступна и на iphone. Но в этой статье будет рассказ именно о версии для часов. Исходный код здесь.


Идея:
Суть игры — быстрый свап в зависимости от направления стрелок. Если блоки со стрелками заполнили всё игровое поле то игрок проиграл.
После создания игры на iphone, решил попробовать портировать её на Apple Watch. Но к сожалению оказалось что используемый движок(Unity) не поддерживает эту платформу — т.е нельзя сделать сборку игры именно под часы ( unity roadmap ). Есть сторонние плагины для взаимодействия юнити игры на iphone и приложения на Apple Watch ( watchkit-unity ) но это не то что мне нужно было.

Разработка:
В 2016 году Apple выпустила SpriteKit для Apple Watch и добавила поддержку Game Center ( видео ). И я решил воспользоваться этим. Игру писал на swift. Тестировал на симуляторе, т.к нет ни iphone ни Apple Watch.
Для начала сделал новый проект(Single View Application). Затем добавил новую target (WatchOS -> Game App).

В проект добавяться две папки. Первая папка с главным storyboard . Он содержит контроллер игры с SpriteKit сценой и дополнительные контроллеры меню, геймцентра и окончания игры. Также в первой папке находятся иконки и ресурсы для storyboard. Вторая папка (Extension) содержит исходный код и ресурсы для сцены SpriteKit.

Начал разработку с главного меню главного меню .

Изначально хотел весь UI сделать на SpriteKit. Но не нашёл удобного способа использовать кнопки в SpriteKit. Поэтому решил сделать все меню на стандартных элементах для WatchKit.
Хотел подключить соцсети (логин в вк и фейсбук) и репост рекордов, но оказалось что нет простого способа сделать это. В ios есть Social Framework , но он пока не поддерживает WatchOS. Поэтому решил отложить до лучших времён.

Затем взялся за создание экрана самой игры ( MainGameController и сцена SpriteKit ).

Здесь было всё стандартно для SpriteKit. В методе update выполняется код перемещения блоков и их удаление в зависимости от жестов игрока. Кстати, жесты я использовал стандартные рекогнайзеры. С библиотеки в сториборд перетащил и указал events. Сделал анимации неправильных жестов с помощью SKAction.
Добавил обучение — также использовал анимации SKAction .
Добавил музыку с помощью класса SKAudioNode. Кстати, музыка управляется с помощью SKAction.play() и SKAction.stop().
Добавил в игру эффекты haptic feedback(тактильная обратная связь). Эффекты используются при проигрыше и при неправильном жесте. Использовал функцию WKInterfaceDevice.current().play(.) ( WKInterfaceDevice ).
Добавил паузу при использовании force touch на экране главной игры. Использовал элемент WKInterfaceMenu . Пытался использовать свои иконки вместо значков, но там с изображения берётся только альфа. Можно также поменять цвет фона.

После создания экрана игры приступил к всплывающем окну завершения игры ( GameEndController ).
Здесь всё стандартно для WatchKit. При проигрыше наверх стека кидаю контроллер проигрыша, при нажатии на кнопку replay убираю верхний контроллер, на кнопку-стрелку назад — переходим на экран главного меню. Как писал выше, хотел добавить кнопку поделиться рекордом в соцсетях, но не нашёл удобного способа.

Затем начал прикручивать геймцентр ( GameCenterWatchController ). У эпл есть видео , но там рассказывается про пошаговый мультиплеер и ничего не говориться как подключать к игре таблицу лидеров (Leaderboard). Поэтому я решил воспользоваться контроллером для таблиц (WKInterfaceTable). Получал рекорды через метод GameKitHelper.sharedInstance.getPlayerScores() Кстати, пока тестирование геймцентра не поддерживается на симуляторе(не импортируется библиотека GameKit). Поэтому я так нормально эту функцию и не протестировал.

При релизе возникло несколько проблем:

1) Я делал игру для часов отдельно от проекта основной игры. При сборке игры для ios, unity(5.5.1) создаёт XCode проект. Я в этот проект добавил target для Apple Watch. Но никак не получалось заархивировать(Archive) сборку. Немного поигрался с настройками сборки проекта: выставил для проекта(Unity-Phone) Build Settings: Supported Platforms — iOS, Architectures — Standard architectures. Для TARGETS: BeaverSpace: Supported Platforms — iOS, Architectures — Standard architectures; SpaceBeaverWatch: Supported Platforms — watchOS, Architectures — Standard architectures; SpaceBeaverWatch Extension: Supported Platforms — watchOS, Architectures — Standard architectures.

2) Игра не прошла ревью апстора с первого раза. Я в проект добавил target для Apple Watch и скопировал в него файлы из другого проекта. Но при этом забыл поменять модули в каждом контроллере главного storyboard для часов. После исправления всё было нормально.

В заключение:

На игру для Apple Watch я потратил 2 недели, но при этом сделал основную версию на ios за 4 месяца в свободное время. В целом очень понравилось разрабатывать для часов, несмотря на возникшие проблемы и неудобства. Порадовало то что Apple сделала поддержку SpriteKit для WatchOS. Планирую продвигать игру для часов в тематических группах вк и вместе с основной игрой. Также добавил ключевых слов связанных с Apple Watch. Пока на 541 месте по запросу “apple watch game” в US.

Всем спасибо за внимание.
Исходный код игры Space Beaver(Бобер и Космос) тут .
ссылка на оригинал статьи https://habrahabr.ru/post/322540/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *