- PVSM.RU - https://www.pvsm.ru -

Интеграция средств VR в Unity3d

Интеграция средств VR в Unity3d
Проходит время и все меняется, в том числе и игры, точнее подход к их созданию. Сейчас появились новомодные штучки типа шлемов виртуальной реальности Oculus Rift, Sony Morpheus, разнообразных контроллеров движения типа Razer Hydra, Sixense STEM и многими другими средствами которые помогают погрузиться с головой в виртуальную реальность. В этой статье будет наглядно разобрана интеграция Oculus Rift и Razer Hydra в Unity3d.

Из шапки следует что у нас есть:

  1. Oculus Rift
  2. Razer Hydra
  3. Unity3d 4.3.4f

Предисловие

Итак я начну с истории про контроллер Razer Hydra, который был выпущен в уже можно сказать далеком 2011 году по немалой цене, но этот девайс позволял не только получать сведения о наклоне и отклонениях джойстика, но еще и координаты каждого из них в пространстве. В то время не было толком игр разработанных с учетом возможностей гидры и про нее многие забыли, но прошло время и был показан Oculus Rift, который позволяет погрузится в ранее неизведанную виртуальную реальность. А для больших ощущений нужно было хотя бы контролировать движения рук и тут на помощь приходит забытая Razer Hydra.

Подготовка

Я пожалуй начну с процесса установки драйверов на устройства. И опять начну с гидры. Для начала стоить понять что Razer уже сама забыла про устройство и драйвера не обновляла очень давно и так же они не предоставляют SDK, но это делает компания Sixense которые собственно и разработали эту технологию, чтобы скачать последний драйвер необходимо зайти на их форум [1], где вам нужно выбрать самую последнюю версию Motion Creator, скачать и установить.

С Oculus Rift, проще, ему не нужны драйверы, но нужно скачать последнюю версию SDK, вы можете это сделать перейдя по ссылке [2], но для скачивания необходимо зарегистрироваться.

Интеграция

Теперь после установки всего софта нам необходимо заставить наши устройства работать в Unity3d. По сложившейся уже традиции начну с Razer Hydra. Необходимо запустить Unity3d, открыть ваш проект или создать новый, перейти в Asset Store(Ctrl+9 хоткей), найти в нем SixenseUnityPlugin, скачать и импортировать.

Интеграция средств VR в Unity3d
Интеграция средств VR в Unity3d

Теперь давайте импортируем пакет SDK Oculus, для этого нам необходимо перетянуть из папки {"Путь до SDK"}ovr_unity_{Номер версии}_libOculusUnityIntegration файл с названием OculusUnityIntegration.unitypackage
Интеграция средств VR в Unity3d

В проекте у нас должны оказаться такие файлы:
Ок, с этим мы справились, теперь необходимо попробовать это все в действии. Для этого создадим сцену на которую для начала разместим Terrain, First Person Controller.

Итак я набросал небольшую сценку чтобы опробовать для начала нашу гидру:
Интеграция средств VR в Unity3d

Также чтобы у вас заработала сама гидра необходимо на сцену добавить объект SixenseInput из папки /SixenseInput в проекте
Интеграция средств VR в Unity3d

Теперь нам необходимо добавить руки на сцену, найдем их в SixenseInput/DemoScenes/Models, объект называется Hand. Так как это просто туториал я не учитываю что это всего лишь одна правая рука =). Так вот чтобы не потерять руки я предлагаю вам их засунуть в пустой объект и закрепить его в иерархии объекта FirstPersonController. Получим что-то вроде этого:
Интеграция средств VR в Unity3d

Теперь нам необходимо создать скрипт для обработки значений выходящих с гидры. Для этого создадим 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е, назначаем руки в соответствующие поля и смотрим что у нас получилось, я приложу ролик демонстрирующий работу.

Прекрасно, настала очередь Oculus Rift, с ним нет особых проблем, нам лишь необходимо заменить аккуратно FirstPersonController на OVRPlayerController из папки OVR/Prefabs. Также не забудьте добавить наш HandsController.cs на OVRCameraController и не забываем назначить руки.

Вот как примерно должно у вас выглядеть:
Интеграция средств VR в Unity3d

После всего этого мы можем протестировать наше творение, но мы не сможем ходить, необходимо решить эту проблему. Создадим скрипт 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 и можно проверять. Приношу извинения за низкий фреймрейт видео:

Итог

В итоге мы получили немного играбельную сцену, где можно понять стоит ли применять эти новомодные штучки у себя в проектах или нет? Я думаю что если делать подобные игры то необходимо продумывать каждую мелочь. Больше мне нечего сказать, спасибо за внимание.

Автор: Dimones

Источник [3]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/unity3d/60927

Ссылки в тексте:

[1] форум: http://sixense.com/forum/vbulletin/forumdisplay.php?157-Beta-Software-Releases

[2] ссылке: https://developer.oculusvr.com

[3] Источник: http://habrahabr.ru/post/223295/