Впервые на русском: Документация Unity для разработчиков. Обзор VREyeRaycaster, VRInput и VRInteractiveItem

Продолжаем публикацию эксклюзивной информации для разработчиков Unity. Новый раздел посвящён обзору VREyeRaycaster, VRInput и VRInteractiveItem.

  1. Документация Unity для разработчиков:
    1. Обзор виртуальной реальности
    2. Проекты сэмплов для виртуальной реальности
    3. Начало работы с VR Development. Основы
    4. Утилиты Oculus Unity
    5. Начало работы с VR Development. Создание первого проекта виртуальной реальности
    6. Начало работы с VR Development. Полезная информация для разработки виртуальной реальности
    7. Обзор VREyeRaycaster, VRInput и VRInteractiveItem
    8. Обзор SelectionRadial и SelectionSlider
    9. Примеры взаимодействия в VRSampleScenes. Взаимодействия в Menu scene
    10. Примеры взаимодействия в VRSampleScenes. Взаимодействие в Лабиринте
    11. Примеры взаимодействия в VRSampleScenes. Взаимодействие Лётчика
    12. Примеры взаимодействия в VRSampleScenes. Взаимодействие в Тире 180 и Тире 360
    13. Вращение и позиционирование головы в виртуальной реальности
    14. Взаимодействие с тачпадом и клавиатурой во время игры в виртуальной реальности
    15. Примеры VRInput в VR Samples
    16. Пользовательские интерфейсы для виртуальной реальности
    17. Взаимодействие с пользовательским интерфейсом
    18. Свободное сглаживание текста для виртуальной реальности
    19. Движение в виртуальной реальности
    20. Движение в сценах VR Sample
    21. Старт проекта виртуальной реальности. DK2
    22. Старт проекта виртуальной реальности на Gear VR
    23. Публикация в магазине Oculus
    24. Оптимизация виртуальной реальности в Unity. Введение

В виртуальной реальности нам часто нужно активировать объект, на который смотрит пользователь. Для VRS-образцов была создана простая, расширяемая, легкая система, позволяющая пользователям взаимодействовать с объектами. Она состоит из трёх основных сценариев: VREyeRaycaster, VRInput и VRInteractiveItem – краткое описание этих классов приведено ниже. Исходный код также прокомментирован.

VREyeRaycaster

Этот скрипт необходимо разместить на Main Camera. Каждый скрипт Update () бросает луч вперёд, используя Physical.Raycast для того, чтобы увидеть, попадает ли луч в какие-либо коллайдеры. Это также может исключать определенные слои – в зависимости от вашей сцены, вы можете перемещать все интерактивные объекты на отдельный слой по соображениям производительности.

Если коллайдер был задет лучом, этот скрипт пытается найти компонент VRInteractiveItem в GameObject:

 

VRInteractiveItem interactible = hit.collider.GetComponent<VRInteractiveItem>();    //attempt to get the VRInteractiveItem on the hit object

 

Из этого мы можем определить, смотрит ли пользователь на объект или уже перестал смотреть на объект. Если пользователь начал смотреть или остановился, глядя на объект, мы можем с ним что-то сделать, например, вызвать метод.

VRInput

VRInput – это простой класс, который определяет, были ли на GearVR движения, нажатия или двойные нажатия – или эквивалентная настройка управления для ввода данных с компьютера при использовании DK2.

Вы можете напрямую подписаться на события в VRInput:

 

public event Action<SwipeDirection> OnSwipe;                // Called every frame passing in the swipe, including if there is no swipe.

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 с пометкой «Работа мечты», и мы поможем вам с этим.