Programming
Development for iOS
Development of mobile applications
Game development
Swift
23 March 2017

Первый опыт разработки игры для 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 (Бобер и Космос) тут.

+11
7.6k 35
Comments 10
Top of the day