Интеграция средств VR в Unity3d
Проходит время и все меняется, в том числе и игры, точнее подход к их созданию. Сейчас появились новомодные штучки типа шлемов виртуальной реальности Oculus Rift, Sony Morpheus, разнообразных контроллеров движения типа Razer Hydra, Sixense STEM и многими другими средствами которые помогают погрузиться с головой в виртуальную реальность. В этой статье будет наглядно разобрана интеграция Oculus Rift и Razer Hydra в Unity3d.Из шапки следует что у нас есть:
Oculus Rift Razer Hydra Unity3d 4.3.4f ПредисловиеИтак я начну с истории про контроллер Razer Hydra, который был выпущен в уже можно сказать далеком 2011 году по немалой цене, но этот девайс позволял не только получать сведения о наклоне и отклонениях джойстика, но еще и координаты каждого из них в пространстве. В то время не было толком игр разработанных с учетом возможностей гидры и про нее многие забыли, но прошло время и был показан Oculus Rift, который позволяет погрузится в ранее неизведанную виртуальную реальность. А для больших ощущений нужно было хотя бы контролировать движения рук и тут на помощь приходит забытая Razer Hydra.Подготовка Я пожалуй начну с процесса установки драйверов на устройства. И опять начну с гидры. Для начала стоить понять что Razer уже сама забыла про устройство и драйвера не обновляла очень давно и так же они не предоставляют SDK, но это делает компания Sixense которые собственно и разработали эту технологию, чтобы скачать последний драйвер необходимо зайти на их форум, где вам нужно выбрать самую последнюю версию Motion Creator, скачать и установить.С Oculus Rift, проще, ему не нужны драйверы, но нужно скачать последнюю версию SDK, вы можете это сделать перейдя по ссылке, но для скачивания необходимо зарегистрироваться.
Интеграция Теперь после установки всего софта нам необходимо заставить наши устройства работать в Unity3d. По сложившейся уже традиции начну с Razer Hydra. Необходимо запустить Unity3d, открыть ваш проект или создать новый, перейти в Asset Store (Ctrl+9 хоткей), найти в нем SixenseUnityPlugin, скачать и импортировать.
Теперь давайте импортируем пакет SDK Oculus, для этого нам необходимо перетянуть из папки \{«Путь до SDK»}\ovr_unity_{Номер версии}_lib\OculusUnityIntegration файл с названием OculusUnityIntegration.unitypackage
В проекте у нас должны оказаться такие файлы: Ок, с этим мы справились, теперь необходимо попробовать это все в действии. Для этого создадим сцену на которую для начала разместим Terrain, First Person Controller.
Итак я набросал небольшую сценку чтобы опробовать для начала нашу гидру:
Также чтобы у вас заработала сама гидра необходимо на сцену добавить объект SixenseInput из папки /SixenseInput в проекте
Теперь нам необходимо добавить руки на сцену, найдем их в SixenseInput/DemoScenes/Models, объект называется Hand. Так как это просто туториал я не учитываю что это всего лишь одна правая рука =). Так вот чтобы не потерять руки я предлагаю вам их засунуть в пустой объект и закрепить его в иерархии объекта FirstPersonController. Получим что-то вроде этого:
Теперь нам необходимо создать скрипт для обработки значений выходящих с гидры. Для этого создадим C# скрипт, назовем его HandsController и поместим в него этот код:
HandsController.cs using UnityEngine; using System.Collections;
public class HandsController: MonoBehaviour { float m_sensitivity = 0.003f; public GameObject leftHand; public GameObject rightHand; void Update () { leftHand.transform.localPosition = SixenseInput.Controllers[0].Position * m_sensitivity; rightHand.transform.localPosition = SixenseInput.Controllers[1].Position * m_sensitivity; leftHand.transform.localRotation = SixenseInput.Controllers [0].Rotation; rightHand.transform.localRotation = SixenseInput.Controllers [1].Rotation; } } Вешаем этот скрипт на MainCamera в FirstPersonControllerе, назначаем руки в соответствующие поля и смотрим что у нас получилось, я приложу ролик демонстрирующий работу.
[embedded content]
Прекрасно, настала очередь Oculus Rift, с ним нет особых проблем, нам лишь необходимо заменить аккуратно FirstPersonController на OVRPlayerController из папки OVR/Prefabs. Также не забудьте добавить наш HandsController.cs на OVRCameraController и не забываем назначить руки.
Вот как примерно должно у вас выглядеть:
После всего этого мы можем протестировать наше творение, но мы не сможем ходить, необходимо решить эту проблему. Создадим скрипт MoveController.cs и положим в него этот код:
MoveController.cs using UnityEngine; using System.Collections;
public class MoveController: MonoBehaviour {
void Update () { float X = SixenseInput.Controllers[1].JoystickX * 5; float Y = SixenseInput.Controllers[1].JoystickY * 5; X*=Time.deltaTime; Y*=Time.deltaTime; transform.Translate (X, 0, Y); } } Этот скрипт мы назначим на OVRPlayerController и можно проверять. Приношу извинения за низкий фреймрейт видео:[embedded content]
Итог В итоге мы получили немного играбельную сцену, где можно понять стоит ли применять эти новомодные штучки у себя в проектах или нет? Я думаю что если делать подобные игры то необходимо продумывать каждую мелочь. Больше мне нечего сказать, спасибо за внимание.