среда, 16 апреля 2014 г.

Unity3D for Windows Phone 8 - Compass Plugin


О мобильной платформе Windows Phone 8 сейчас написано мало, особенно в контексте ее использование в Unity3D. Работая в InteractiveLab мне выпала возможность разработать несколько приложений для Windows Phone 8, а конкретно на Nokia Lumia 1520 с использованием датчика - компас.

Задача было сделать приложение показывающее панорамную картину в зависимости от того куда мы смотрим. Для этих целей необходимо использовать встроенный в смартфон датчик - "компас". Сначала я попробовал сделать приложение из стандартных инструментов разработки Microsoft Visual Studio 2013.


Очень удобным оказался инструмент Blend for Visual Studio 2013, который позволяет быстро создавать и редактировать UI приложений через специальный язык разметки XAML. Эта платформа очень похожа и по методологии работы является аналогом Apache Flex и HTML/XML, с которой у меня есть большой опыт работы.


Да и вообще разработка нативных приложений для WP8 оказалась очень удобным и быстрым делом, потому как есть хорошие примеры, есть документация в MSDN, где хорошо расписан весь функционал, правда не всегда полностью. Очень понравилось то, что приложение быстро компилируется и практически моментально запускается на телефоне. Но есть одно ограничение - для стандартных разработчиков возможно устанавливать и тестировать только одно приложение на WP. В примерах на сайте разработчиков Windows Phone Samples я нашел несколько готовых шаблонов использования датчиков (компаса, гироскопа и акселерометра), собрал их в одно приложение и посмотрел как это работает на реальном устройстве. Мне понравилось.


Но самое интересное начинается дальше. При запуске тестового приложения из редактора Unity3D на WP оно запустилось с первого раза, без каких либо проблем, правда немного дольше портировалось на само устройство (раза в три-четыре медленней). Но главное что оно запустилось и очень даже хорошо.
Дальше нужно было подключить компас. Compass API из документации Unity почему то не заработал. Поэтому было принято решение написать собственную DLL для работы с компасом. Я быстро нашел подсказку в документации как можно сделать стороннюю dll библиотеку с функционалом для использования в Unity на C# (ссылка), повторил все что там написано и интегрировал в туда код уже проверенный в нативном приложении. Единственное это переписал его на статические функции.


Код использования этого функционала в Unity:


Здесь я добавил небольшое смягчение через специальную функцию Unity - Vector2.Lerp. Да, для положения трехмерного объекта, здесь я использую Vector2.


Итог: Разрабатывать под WP8 на Unity3D можно, это работает. Правда документации пока что практически нету. И многое конечно нужно тестировать. 

Отдельно хочу сказать про Scaleform - для WP8 он пока что не работает. Во первых многие функции, которые берутся из dll библиотеки для WP используются не корректно и их нужно править вручную. Во вторых, даже после этих исправлений Scaleform не хочет компилироваться, скорее всего это происходит из-за того что некоторых функций для WP нету в DLL.

Проект с этим плагином можно скачать отсюда

Комментариев нет:

Отправить комментарий