Впервые на русском: Документация Unity для разработчиков. Примеры взаимодействия в VRSampleScenes. Взаимодействие в Лабиринте

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

Документация Unity для разработчиков:

  1. Обзор виртуальной реальности
  2. Проекты сэмплов для виртуальной реальности
  3. Начало работы с VR Development. Основы
  4. Начало работы с VR Development. Создание первого проекта виртуальной реальности
  5. Начало работы с VR Development. Полезная информация для разработки виртуальной реальности
  6. Обзор VREyeRaycaster, VRInput и VRInteractiveItem
  7. Обзор SelectionRadial и SelectionSlider
  8. Примеры взаимодействия в VRSampleScenes. Взаимодействия в Menu scene
  9. Примеры взаимодействия в VRSampleScenes. Взаимодействие в Лабиринте

Игра «Лабиринт» дает пример взаимодействия в настольном стиле, в котором вы направляете персонажа к выходу, избегая башни, которые можно деактивировать с помощью переключателя (спойлер!).

При выборе адресата для персонажа появится маркер назначения вместе с дорожкой, чтобы показать вам маршрут, который он будет принимать. Вы можете изменять вид с помощью прокрутки, прокручивая тачпад, нажимая клавиши со стрелками или используя левую кнопку джойстика.

Объект MazeFloor имеет привязку MeshCollider и VRInteractiveItem, чтобы разрешить взаимодействие в виртуальной реальности:

MazeCourse GameObject – это родительский элемент, который содержит GameEbjects MazeFloor и MazeWalls GameObjects, которые, в свою очередь, содержат геометрию, используемую для макета лабиринта.

В MazeCourse есть сценарий MazeTargetSetting, который имеет ссылку на компонент VRInteractiveItem на MazeFloor:

MazeTargetSetting подписывается на событие OnDoubleClick в VRInteractiveItem, которое затем отправляет событие OnTargetSet. Это событие передает преобразование сетки в качестве параметра:

 

public event Action<Transform> OnTargetSet;                     // This is triggered when a destination is set.

 

 

private void OnEnable()

{

m_InteractiveItem.OnDoubleClick += HandleDoubleClick;

}

 

 

private void OnDisable()

{

m_InteractiveItem.OnDoubleClick -= HandleDoubleClick;

}

 

 

private void HandleDoubleClick()

{

// If target setting is active and there are subscribers to OnTargetSet, call it.

if (m_Active && OnTargetSet != null)

OnTargetSet (m_Reticle.ReticleTransform);

}

 

Оба компонента Player в GameObject MazeCharacter и компонент DestinationMarker в GameObject MazeDestinationMarkerGUI подписываются на это событие и реагируют соответствующим образом.

Персонаж использует системы Nav Mesh для поиска пути вокруг лабиринта. Компонент Player имеет функцию HandleSetTarget, которая устанавливает назначение агента Nav Mesh в положение Transtic Reticle и обновляет след Agent – визуальный рендеринг пути персонажа:

 

private void HandleSetTarget(Transform target)

{

// If the game isn’t over set the destination of the AI controlling the character and the trail showing its path.

if (m_IsGameOver)

return;

 

m_AiCharacter.SetTarget(target.position);

m_AgentTrail.SetDestination();

}

 

DestinationMarker перемещает маркер в позицию Transtic Reticle:

 

private void HandleTargetSet(Transform target)

{

// When the target is set show the marker.

Show();

 

// Set the marker’s position to the target position.

transform.position = target.position;

 

// Play the audio.

m_MarkerMoveAudio.Play();

 

// Play the animation on whichever layer it is on, with no time offset.

m_Animator.Play(m_HashMazeNavMarkerAnimState, -1, 0.0f);

}

 

Вы можете увидеть сетку, маркер назначения, игрока и след в действии:

Переключатель в Лабиринте также является примером взаимодействия с объектами в виртуальной реальности. Он использует коллайдер, а также классы VRInteractiveItem и SelectionSlider.

Как показано выше с другими интерактивными объектами, скрипт SelectionSlider проверяет события, отправленные VRInteractiveItem и VRInput:

 

private void OnEnable ()

{

m_VRInput.OnDown += HandleDown;

m_VRInput.OnUp += HandleUp;

 

m_InteractiveItem.OnOver += HandleOver;

m_InteractiveItem.OnOut += HandleOut;

}

 

Примечание: Данный материал представлен для ознакомления, при перепечатывании ссылка на оригинал обязательна. Если вы хотите принять участие в помощи проекту, пишите на editor@vrgeek.ru

Если вы разработчик и вы хотите продолжить свою карьеру в лучших компаниях России, пишите на editor@vrgeek.ru с пометкой «Работа мечты», и мы поможем вам с этим.