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

  • Tutorial

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



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


Итог


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

Only registered users can participate in poll. Log in, please.

Будете ли вы у себя внедрять VR?

Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 9

    +8
    Обязательно буду внедрять! Через пару итераций всё казначейство банка будет сидеть в очках VR и охотиться на злостных неплательщиков кредитов.
      +1
      Статья понравилась. Хочу узнать, на сколько сейчас возможно заказать Oculus VR и где?
        0
        Oculus VR вы можете заказать хоть сейчас, но сроки увы огорчат вас. Если сроки не важны то прошу www.oculusvr.com/order/
          0
          Об официальном сайте, я думаю, знает каждый. Как раз из-за сроков я и написал сюда ;)
            0
            Кстати, доставка если сейчас заказать будет в августе, не так и долго.
              0
              В Россию и Украину я так понимаю доставки нет :( А очень хочется.
        0
        Там две правых руки?
          0
          Читайте внимательнее:
          Так как это просто туториал я не учитываю что это всего лишь одна правая рука =)
            0
            Причём обе ампутированы… Эстетический испуг :(

          Only users with full accounts can post comments. Log in, please.