Про портирование Unity-игр на Windows Phone

Кто-то может предположить, что статистические опросы – важная составляющая любой деятельности, дающая развернутую информацию о том или ином процессе. Но не в случае с портированием игр. Информация о том, что 99% разработчиков ассоциируют этот процесс со словом «боль», думаю, не удивит никого. В связи с этим нужно разобраться, а как все-таки начать работать с платформой Windows Phone в связке с Unity. Разбираться будем на примере последней версии Unity (на момент написания статьи это 4.5.2) и магазинов Windows, и попробуем понять, так ли это сложно на самом деле.

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

Для начала нам с вами, очевидно, понадобится игра. Пара часов несложного кодирования и вымученного геймдизайна подарят нам следующий шедевр игровой индустрии прямиком из 1982 года.

Игрок двигает мышью вверх-вниз, кораблик его незамедлительно слушается, снаряды вылетают, удивленные враги из другой популярной игры бесславно погибают в пучине Destroy (gameObject). В общем, все просто.

Здесь начинается причина боли номер один – поддержка всех возможных разрешений экранов. В нашем случае на помощь приходит простой скрипт, который мы используем для главной камеры в процессе разработки. Скрипт меняет размер game view так, чтобы он (размер) соответствовал соотношению сторон используемого экрана.

Скрипт на pastebin

Для сборки Unity-игры под Windows Phone или Windows 8 (с последующей публикацией в Store) нужны Windows Phone SDK 8.0 (который включает в себя бесплатный VS2013 Express), Windows 8 или выше (есть пробная 90-дневная версия), учетная запись Microsoft (тыц), учетная запись разработчика (студенты могут получить ее бесплатно по программе DreamSpark) и, очевидно, устройство на нужной платформе. Unity, согласно оффициальной документации поддерживает эмуляторы, но работает в них не очень хорошо.

Обработка ввода
В случае с мышью нам практически не нужно делать дополнительных доработок кода – обработка нажатий и перемещений мыши будет достаточным условием для того, чтобы это все работало для touch-экранов мобильных устройств без лишнего шаманства. 

То есть, Input.mousePosition.x будет возвращать место, где сейчас находится мышь в случае версий для компьютера, и координаты касания (любого) в случае устройства с тачскрином. Аналогично и с остальными методами. Если вы разрабатываете игру сразу под тач-интерфейс или хотите обработать какие-то специфические жесты, то на помощь вам придет Input.Touch.

Кроме того, если вы хотите, например, выводить целевые сообщения пользователям определенной платформы, можно использовать следующие конструкции:
#if UNITY_EDITOR
// код, исполняемый только в редакторе unity.
Debug.Log(«Unity Editor»);
#endif

Для Windows Phone 8 эта директива может выглядеть так:
#if (UNITY_WP8 && !UNITY_EDITOR) или просто #UNITY_WP8

Подробный список директив и парочку примеров можно посмотреть в официальной документации Unity. 

Чтобы собрать игру, вам нужно выбрать целевую платформу Windows Phone 8 в меню File – Build Settings.



После сборки Unity сгенерирует проект Windows Phone Xaml/C#, который нужно будет скомпилировать в Visual Studio для получения финального пакета (XAP) и файла-манифеста, которые нужны для непосредственного запуска игры под Windows Phone. Отладочный запуск проекта через Visual Studio на реальном устройстве выглядит вот так:

С одной стороны, это все что необходимо. С другой стороны, игре может потребоваться оптимизация для соответствия мобильному «железу». В целом, у аппаратной части устройств Windows Phone высокая степень совместимости (приложение, запускающееся на одном телефоне, без проблем запустится и на другом), но остановимся на основных моментах, которые придется иметь в виду.



Графика
Аппаратное ускорение с программируемым GPU и поддержкой Direct3D.

Дисплей
На данный момент поддерживаются 4 разрешения экрана: 480х800 (WVGA), 768x1280(WXGA), 720x1280 (720p) и 1080x1920 (1080p). Для определения размеров экрана можно обратиться к Screen.width и Screen.height прямо из Unity. Для картинок вне игры (splash-screen, плиток) достаточно поддерживать разрешение WXGA.

Память
Возможны несколько конфигураций памяти: 512 мегабайт для устройств с WVGA и как минимум 1 гигабайт для устройств с разрешением 720p. На самых свежих моделях размер памяти может достигать двух гигабайт. 

Аппаратные API
Акселерометр установлен на всех телефонах с Windows Phone и доступен прямо из Unity, наличие доступа к гироскопу зависит от его присутствия в телефоне. API для компаса, микрофона, камеры и местоположения доступны в Unity с версии 4.3

Для интеграции с платформой можно добавить в вашу игру поддержку живых плиток и Push-уведомлений, а также монетизацию (пробную версию игры или внутриигровые покупки)

Перед отправкой игры в магазин убедитесь, что у вас есть учетная запись разработчика Windows Phone и лицензионная версия Unity. Если это действительно так, то скорее собирайте свою собственную игру, отправляйте ее в магазин Windows Phone и участвуйте в конкурсе игр. Желаем удачи!