Про портирование Unity-игр на Windows Phone
Кто-то может предположить, что статистические опросы — важная составляющая любой деятельности, дающая развернутю информацию о том или ином процессе. Но не в случае с портированием игр. Информация о том, что 99% разработчиков ассоциируют этот процесс со словом «боль», думаю, не удивит никого. В связи с этим нужно разобраться, а как все-таки начать работать с платформой Windows Phone в связке с Unity. Разбираться будем на примере последней версии Unity (на момент написания статьи это 4.5.2) и магазинов Windows, и попробуем понять, так ли это сложно на самом деле.Под хабракатом — картинки, радость, счастье и слезы просветления.Дисклеймер: весь показанный в статье код не является образцом для подражания, примером идеального кода и прочих вымышленных и не существующих в природе вещей. Практики, примененные в статье, могут являться одними из множества решений конкретной проблемы. А могут и не являться.Для начала нам с вами, очевидно, понадобится игра. Пара часов несложного кодирования и вымученного геймдизайна подарят нам следующий шедевр игровой индустрии прямиком из 1982 года.
Гифка с демонстрацией геймплея, 1.65mb Игрок двигает мышью вверх-вниз, кораблик его незамедлительно слушается, снаряды вылетают, удивленные враги из другой популярной игры бессплавно погибают в пучине 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 на реальном устройстве выглядит вот так
[embedded content]
С одной стороны, это все что необходимо. С другой стороны, игре может потребоваться оптимизация для соответствия мобильному «железу». В целом, у аппаратной части Windows Phone устройств высокая степень совместимости (приложение, запускающееся на одном телефоне, без проблем запустится и на другом), но остановимся на основных моментах, которые придется иметь в виду.
ГрафикаАппаратное усокрение с программируемым GPU и поддержкой Direct3D.
ДисплейНа данный момент поддерживаются 4 разрешения экрана: 480×800 (WVGA), 768×1280(WXGA), 720×1280 (720p) и 1080×1920 (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 и участвуйте в конкурсе игр. Желаем удачи!