Інтеграція засобів VR в Unity3d

    
Проходить час і все змінюється, в тому числі і ігри, точніше підхід до їх створення. Зараз з'явилися новомодні штучки типу шоломів віртуальної реальності Oculus Rift, Sony Morpheus, різноманітних контролерів руху типу Razer Hydra, Sixense STEM і багатьма іншими засобами які допомагають поринути з головою у віртуальну реальність. У цій статті буде наочно розібрана інтеграція Oculus Rift і Razer Hydra в Unity3d.
 
 
З шапки слід що у нас є:
 
     
  1. Oculus Rift
  2.  
  3. Razer Hydra
  4.  
  5. Unity3d 4.3.4f
  6.  
 
 

Передмова

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

Підсумок

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

    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.