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

Комментарии (10)


  1. Linder666
    24.03.2017 13:50
    +1

    Интересная разработка для мобильных устройств.

    Оффтопик: Кто пользуется «умными» часами, скажите, а какой функционал не дает смартфон, но даёт этот прибор? в чем смысл покупать умные часы?


    1. dajver
      24.03.2017 17:34
      +1

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


      1. iNorD
        27.03.2017 00:59

        iPhone тоже так делает. По крайней мере последние модели.


        1. Linder666
          27.03.2017 13:26

          Blackberry 10 тоже умеют чувствовать, когда в режиме сна их переворачиваешь, не актуально


    1. lasc
      27.03.2017 03:05
      +1

      Можно посмотреть кто звонит и ответить с часов. Кормят iHealth данными о пульсе. Перед поворотами вибрируют и дублируют информации о картах. Есть диктофон(так себе работает). Можно удаленно управлять камерой, использую как временную замену видеоняни когда не дома. Показывают сообщение с мессенжеров, можно односложно ответить. Часы и приливы\отливы.
      Больше наверно ни чем не пользуюсь, часы первого поколения, купил как скинули цену. Гоняю в хвост и в гриву, плаваю и тд. Из повреждение — поцарапал экран когда с размаху ударил в угол гранитного стола. Батарейки на 1.5 дня.


      1. Linder666
        27.03.2017 13:30
        +1

        Мое личное имхо:

        Можно посмотреть кто звонит и ответить с часов

        гениально, а сам телефон зачем?

        Кормят iHealth данными о пульсе

        Опять же имхо, но те, кто парится всякими мед.приборами купят профессиональные приблуды, а не плюшку к браслетику.

        Перед поворотами вибрируют и дублируют информации о картах

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

        Можно удаленно управлять камерой, использую как временную замену видеоняни когда не дома

        А можно поподробнее о данном процессе? Заинтересовало

        Показывают сообщение с мессенжеров, можно односложно ответить. Часы и приливы\отливы.

        Практично ли это? Как часто вы обходитесь односложными ответами? Ну про часы промолчим =)


        1. lasc
          29.03.2017 03:50
          +1

          Телефон где-то лежит, с выключенным экраном и без звука. На митинге где телефоном не культурно светить.
          На рыбалке, телефон в водозащитном кейсе в компартменте каяка(который еще и перевернуться норовит) а часы на руке.

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

          Ну я специальный прибор не будут носить, а так некоторым помогает http://bgr.com/2016/03/15/apple-watch-heart-attack/

          Карты удобны на велосипеде, мото, пешком например. Телефон лежит в кармане\рюкзаке.

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

          Односложные ответы вполне, можно кстати и надиктовать что-то подлинней. А так ответить на смс «Я приехал жду» одним словом удобно. Там не просто Да\Нет. там выбор зависящий от сообщения вариантов 20 ответа.

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


  1. alexoron
    24.03.2017 14:57
    +1

    Ждем DOOM for Apple Watch )))


    1. darkwinddev
      24.03.2017 14:58

      уже есть такое) https://www.youtube.com/watch?v=KXhf_SpO6wA


      1. alexoron
        24.03.2017 21:01
        +1

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