- PVSM.RU - https://www.pvsm.ru -
Проходит время и все меняется, в том числе и игры, точнее подход к их созданию. Сейчас появились новомодные штучки типа шлемов виртуальной реальности Oculus Rift, Sony Morpheus, разнообразных контроллеров движения типа Razer Hydra, Sixense STEM и многими другими средствами которые помогают погрузиться с головой в виртуальную реальность. В этой статье будет наглядно разобрана интеграция Oculus Rift и Razer Hydra в Unity3d.
Из шапки следует что у нас есть:
Итак я начну с истории про контроллер 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, скачать и импортировать.
Теперь давайте импортируем пакет SDK Oculus, для этого нам необходимо перетянуть из папки {"Путь до SDK"}ovr_unity_{Номер версии}_libOculusUnityIntegration
файл с названием OculusUnityIntegration.unitypackage
В проекте у нас должны оказаться такие файлы:
Ок, с этим мы справились, теперь необходимо попробовать это все в действии. Для этого создадим сцену на которую для начала разместим Terrain
, First Person Controller
.
Итак я набросал небольшую сценку чтобы опробовать для начала нашу гидру:
Также чтобы у вас заработала сама гидра необходимо на сцену добавить объект SixenseInput
из папки /SixenseInput
в проекте
Теперь нам необходимо добавить руки на сцену, найдем их в SixenseInput/DemoScenes/Models
, объект называется Hand
. Так как это просто туториал я не учитываю что это всего лишь одна правая рука =). Так вот чтобы не потерять руки я предлагаю вам их засунуть в пустой объект и закрепить его в иерархии объекта FirstPersonController
. Получим что-то вроде этого:
Теперь нам необходимо создать скрипт для обработки значений выходящих с гидры. Для этого создадим C# скрипт, назовем его HandsController и поместим в него этот код:
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
и положим в него этот код:
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/
Нажмите здесь для печати.