Продолжаем публикацию эксклюзивной информации для разработчиков Unity. Новый раздел посвящён обзору VREyeRaycaster, VRInput и VRInteractiveItem.
Документация Unity для разработчиков:
- Обзор виртуальной реальности
- Проекты сэмплов для виртуальной реальности
- Начало работы с VR Development. Основы
- Начало работы с VR Development. Создание первого проекта виртуальной реальности
- Начало работы с VR Development. Полезная информация для разработки виртуальной реальности
- Обзор VREyeRaycaster, VRInput и VRInteractiveItem
В виртуальной реальности нам часто нужно активировать объект, на который смотрит пользователь. Для VRS-образцов была создана простая, расширяемая, легкая система, позволяющая пользователям взаимодействовать с объектами. Она состоит из трёх основных сценариев: VREyeRaycaster, VRInput и VRInteractiveItem – краткое описание этих классов приведено ниже. Исходный код также прокомментирован.
VREyeRaycaster
Этот скрипт необходимо разместить на Main Camera. Каждый скрипт Update () бросает луч вперёд, используя Physical.Raycast для того, чтобы увидеть, попадает ли луч в какие-либо коллайдеры. Это также может исключать определенные слои – в зависимости от вашей сцены, вы можете перемещать все интерактивные объекты на отдельный слой по соображениям производительности.
Если коллайдер был задет лучом, этот скрипт пытается найти компонент VRInteractiveItem в GameObject:
VRInteractiveItem interactible = hit.collider.GetComponent
Из этого мы можем определить, смотрит ли пользователь на объект или уже перестал смотреть на объект. Если пользователь начал смотреть или остановился, глядя на объект, мы можем с ним что-то сделать, например, вызвать метод.
VRInput
VRInput – это простой класс, который определяет, были ли на GearVR движения, нажатия или двойные нажатия – или эквивалентная настройка управления для ввода данных с компьютера при использовании DK2.
Вы можете напрямую подписаться на события в VRInput:
public event Action
public event Action OnClick; // Called when Fire1 is released and it’s not a double click.
public event Action OnDown; // Called when Fire1 is pressed.
public event Action OnUp; // Called when Fire1 is released.
public event Action OnDoubleClick; // Called when a double click is detected.
public event Action OnCancel; // Called when Cancel is pressed.
Дополнительную информацию о подписке на события см. в «Руководстве по событиям».
VRInteractiveItem
Это компонент, который вы можете добавить в любой объект GameObject, с которым вы хотите, чтобы пользователь взаимодействовал в виртуальной реальности. Он требует коллайдера на объекте, к которому он привязан.
Есть шесть событий, на которые вы можете подписаться:
public event Action OnOver; // Called when the gaze moves over this object
public event Action OnOut; // Called when the gaze leaves this object
public event Action OnClick; // Called when click input is detected whilst the gaze is over this object.
public event Action OnDoubleClick; // Called when double click input is detected whilst the gaze is over this object.
public event Action OnUp; // Called when Fire1 is released whilst the gaze is over this object.
public event Action OnDown; // Called when Fire1 is pressed whilst the gaze is over this object.
И одно логическое значение, которое можно использовать, чтобы увидеть, завершено ли оно в данный момент:
public bool IsOver
{
get { return m_IsOver; } // Is the gaze currently over this object?
}
Затем вы можете создать свой собственный скрипт, который будет реагировать на эти события. Вот очень простой пример: использование некоторых из этих событий:
using UnityEngine;
using VRStandardAssets.Utils;
namespace VRStandardAssets.Examples
{
// This script is a simple example of how an interactive item can
// be used to change things on gameobjects by handling events.
public class ExampleInteractiveItem : MonoBehaviour
{
[SerializeField] private Material m_NormalMaterial;
[SerializeField] private Material m_OverMaterial;
[SerializeField] private Material m_ClickedMaterial;
[SerializeField] private Material m_DoubleClickedMaterial;
[SerializeField] private VRInteractiveItem m_InteractiveItem;
[SerializeField] private Renderer m_Renderer;
private void Awake ()
{
m_Renderer.material = m_NormalMaterial;
}
private void OnEnable()
{
m_InteractiveItem.OnOver += HandleOver;
m_InteractiveItem.OnOut += HandleOut;
m_InteractiveItem.OnClick += HandleClick;
m_InteractiveItem.OnDoubleClick += HandleDoubleClick;
}
private void OnDisable()
{
m_InteractiveItem.OnOver -= HandleOver;
m_InteractiveItem.OnOut -= HandleOut;
m_InteractiveItem.OnClick -= HandleClick;
m_InteractiveItem.OnDoubleClick -= HandleDoubleClick;
}
//Handle the Over event
private void HandleOver()
{
Debug.Log(«Show over state»);
m_Renderer.material = m_OverMaterial;
}
//Handle the Out event
private void HandleOut()
{
Debug.Log(«Show out state»);
m_Renderer.material = m_NormalMaterial;
}
//Handle the Click event
private void HandleClick()
{
Debug.Log(«Show click state»);
m_Renderer.material = m_ClickedMaterial;
}
//Handle the DoubleClick event
private void HandleDoubleClick()
{
Debug.Log(«Show double click»);
m_Renderer.material = m_DoubleClickedMaterial;
}
}
}
Чтобы увидеть базовый пример такого скрипта, взгляните на сцену InteractiveItem в VRSampleScenes/Scenes/Examples/.
Примечание: Данный материал представлен для ознакомления, при перепечатывании ссылка на оригинал обязательна. Если вы хотите принять участие в помощи проекту, пишите на editor@vrgeek.ru
Если вы разработчик и вы хотите продолжить свою карьеру в лучших компаниях России, пишите на editor@vrgeek.ru с пометкой «Работа мечты», и мы поможем вам с этим.