Ручной тренер — MRTK2

Меню

Ручной тренер — это трехмерная смоделированная рука, которая активируется, когда система не обнаруживает руки пользователя. Это реализуется как компонент "обучения", который помогает направлять пользователя, когда жест не был обучен. Если пользователь не выполнял указанный жест в течение определенного периода, руки будут циклически с задержкой. Ручной тренер можно использовать для представления нажатия кнопки или получения голограммы.

Текущая модель взаимодействия представляет широкий спектр элементов управления жестами, таких как прокрутка, выбор дальней области и близкое касание. Ниже приведен полный список существующих примеров hand coach:

  • Близкое касание — используется для кнопок или закрытия взаимодействуемых объектов
  • Дальней выборки — используется для объектов, которые находятся далеко.
  • Перемещение — используется для перемещения голограммы в пространстве
  • Повернуть — используется для демонстрации поворота голограмм или объектов.
  • Масштаб — используется для демонстрации того, как управлять голограммами, чтобы они были больше или меньше
  • Переворачивание руки — используется для создания начальной панели пользовательского интерфейса или меню рук
  • Palm up — используется для колибри момент вне коробки. Еще одним предложением может быть создание начальной панели пользовательского интерфейса
  • Scroll — используется для прокрутки списка или длинного документа.

Пример сцены

Примеры можно найти в сцене HandCoachExample в разделе MixedRealityToolkit.Examples/Experimental/HandCoach/Scenes

Ручной трехмерный ресурс

Ресурсы можно найти в разделе MixedRealityToolkit.SDK/Experimental/HandCoach.

Качество

Если вы заметили искажения на сетке с кожей, необходимо убедиться, что ваш проект использует правильное количество соединений. Перейдите в раздел Изменение > параметров > проекта Unity Качество > Другие > весовые коэффициенты смешения. Убедитесь, что выбрано значение "4 кости", чтобы увидеть Гладкие суставы. Параметр проекта

Скрипты

Указание взаимодействия

Скрипт InteractionHint.cs предоставляет функциональные возможности-оболочки для запуска анимации и исчезания для ручной установки.

Настройка указания взаимодействия

Чтобы настроить подсказку взаимодействия, рекомендуется использовать предоставленные заготовки "StaticHandCoachRoot_L.prefab" и "StaticHandCoachRoot_R.prefab". Этот заготовка содержит скрипт InteractionHint и ручную платформу, а также правильную иерархию, чтобы гарантировать, что предоставленные анимации указаний работают должным образом. В противном случае вам потребуется разместить сценарий на уровне gameObject на один родительский уровень с помощью аниматора.

Свойства инспектора

  • HideIfHandTracked Этот логический параметр указывает, следует ли использовать состояние отслеживания рук для скрытия визуальных элементов при отслеживании рук пользователя. Если задано значение false, для определения того, следует ли скрывать подсказку, будет использоваться только свойство скрипта customShouldHideVisuals.

  • MinDelay Это свойство задает минимальную задержку для отображения визуальных элементов. По умолчанию визуальные элементы для руки будут отображаться через эти несколько секунд, если руки пользователя не отслеживаются.

  • MaxDelay Это свойство задает максимальную задержку для отображения визуальных элементов. По умолчанию визуальные элементы для руки будут отображаться через эти несколько секунд, даже если руки пользователя отслеживаются.

  • UseMaxTimer Если для этого логического значения задано значение false, он отключает максимальный таймер и позволяет отображать подсказку руки только в том случае, если руки пользователя находятся вне зрения или пользовательское условие возвращает значение false.

  • Повторяет Это свойство определяет, сколько раз анимация подсказок воспроизводится при прохождении минимального или максимального таймера. Затем подсказка скрывается и ожидает задержки снова.

  • Автоматическая активация Если для этого логического значения задано значение true, подсказка будет автоматически выполняться через логику таймера, когда GameObject скрипта активен в иерархии и скрипт включен. Это значение должно быть равно false, только если вы планируете вручную управлять появлением и исчезновением подсказки с помощью кода.

  • AnimationState Имя состояния анимации, которое должно воспроизводиться при активном указании. Он должен быть задан перед вызовом функции StartHintLoop() (во время включения, если установлен флажок Автоактивация).

Управление InteractionHint с помощью скрипта

  • StartHintLoop Эта функция запускает цикл show/hide, который в противном случае запускает OnEnable, если флаг автоактивации имеет значение true.
  • StopHintLoop Эта функция вызывает состояние анимации затухания, если она не воспроизводится в данный момент, а затем отключит цикл show/hide и установит ручную платформу неактивной в иерархии.
  • AnimationState Эта строка определяет, какое состояние анимации воспроизводится во время цикла. Эту строку можно изменить, чтобы изменить воспроизводимое состояние, но это необходимо сделать после вызова StopHintLoop, а после изменения состояния необходимо снова вызвать StartHintLoop.
  • CustomShouldHideVisuals Это можно задать с помощью собственной функции, которая должна возвращать значение true, если вы хотите скрыть визуальные элементы руки (учитывайте MinMaxTimer, в частности параметр max).

Рекомендации по пользовательской анимации

По умолчанию значения затухания — 0,5 секунды, поэтому любые пользовательские анимации, созданные для использования с буровой платформой, должны составлять не менее 1,5 секунды для передачи значимой информации.

Предоставленные состояния затухания и затухания по умолчанию, Fade_In и Fade_Out можно изменить, изменив метку времени второго ключевого кадра, чтобы задать длину затухания.

Аниматор и скрипт были настроены таким образом, чтобы сделать настройку максимально простой. Чтобы добавить новые состояния анимации, просто импортируйте fbx, убедитесь, что для имени анимации задано отдельное имя, и перетащите ее в аниматор.

MoveToTarget

Скрипт MoveToTarget.cs предоставляет функциональные возможности для перемещения указания руки из позиции отслеживания в целевую позицию с течением времени.

Настройка MoveToTarget

Предоставленные заготовки "MovingHandCoachRoot_L.prefab" и "MovingHandCoachRoot_R.prefab" содержат MoveToTarget в своих иерархиях. Если вы хотите использовать этот скрипт в своей собственной настройке, необходимо поместить его в корневой игровой объект, содержащий аниматор для вашей установки.

Свойства инспектора

  • TrackingObject Задайте его с помощью объекта, за которым следует установка, прежде чем начать движение. Рекомендуется создать пустой GameObject и переместить его в определенное положение, чтобы определить отслеживание.
  • TargetObject Задайте его с помощью объекта, к которому требуется переместить буровую платформу во время перемещения. Рекомендуется создать пустой GameObject и переместить его в определенное положение, чтобы определить отслеживание.
  • RootObject Задайте для него общий родительский объект для отслеживания и целевого объекта, чтобы можно было правильно вычислить относительные позиции. Включенный префаб имеет как отслеживаемые, так и целевые объекты в своей иерархии, но вы можете задать целевой объект как gameObject за пределами префаба и изменить корневой объект на общий родительский.
  • Длительность Время перехода с TrackingObject на TargetObject (в секундах) в секундах.
  • TargetOffset Настраиваемое смещение, чтобы получить GameObject, чтобы добраться до нужной целевой позиции. Это полезно, если анимация включает смещение позиции во время анимации.
  • AnimationCurve По умолчанию используется линейная кривая, но вы можете изменить кривую, чтобы обеспечить ослабление при запуске и остановке пути движения.

Управление MoveToTarget с помощью скрипта

В пользовательском скрипте вызовите команду Follow(), чтобы ручная установка следила за TrackingObject, а затем вызовите MoveToTargetPosition(), если вы хотите, чтобы ручная установка начала движение в TargetObject.

Управление MoveToTarget с помощью анимации

В анимации, которую необходимо переместить, задайте два события: одно с вызовом Follow() и одно с вызовом MoveToTargetPosition(). Параметр Follow должен быть установлен на первом ключевом кадре, так как это приводит к тому, что ручная установка будет следовать за объектом TrackingObject. MoveToTargetPosition следует задать на ключевом кадре, где вы хотите, чтобы буровая установка начала перемещаться к целевому объекту. Таким образом функциональность скрипта используется в предоставленных заготовке.

RotateAroundPoint

Скрипт RotateAroundPoint.cs предоставляет функциональные возможности для поворота подсказки руки вокруг точки поворота с течением времени.

Настройка RotateAroundPoint

Предоставленные заготовки "RotatingHandCoachRoot_L.prefab" и "RotatingHandCoachRoot_R.prefab" содержат объект RotateAroundPoint в иерархиях. Если вы хотите использовать этот скрипт в своей собственной настройке, необходимо поместить его в корневой игровой объект, содержащий аниматор для вашей установки.

Свойства инспектора

  • CenteredParent Задайте его с помощью родительского объекта, вокруг которого требуется развернуть буровую платформу.
  • Инверсныйпарент Установите этот параметр с родительским элементом, чтобы повернуть обратно на по центруParent, чтобы сохранить ориентацию руки одинаковой. Как правило, это будет родительский объект со скриптом InteractionHint.
  • Сводная позиция Присвойте этому параметру точку, с которой вы хотите, чтобы подсказка начала движение.
  • Длительность Время, которое должно занять (в секундах) для поворота вокруг CenteredParent.
  • AnimationCurve По умолчанию используется линейная кривая, но вы можете изменить кривую, чтобы обеспечить ослабление при запуске и остановке пути движения.
  • RotationVector Сколько градусов повернуть вдоль каждой оси.

Управление RotateAroundPoint с помощью скрипта

В пользовательском скрипте вызовите RotateToTarget(), если хотите, чтобы ручная установка начала свою ротацию вокруг CenteredParent. Если вы хотите, чтобы позиция была сброшена до исходной позиции, вызовите ResetAndDeterminePivot().

Управление RotateAroundPoint с помощью анимаций

В анимации, которую необходимо переместить, задайте два события: одно с вызовом ResetAndDeterminePivot() и другое с вызовом RotateToTarget(). ResetAndDeterminePivot следует задать для первого ключевого кадра, так как это приводит к сбросу оснастки руки к PivotPosition. Параметр RotateToTarget должен быть установлен на ключевом кадре, где вы хотите, чтобы установка начала вращаться вокруг CenteredParent. Именно так используются функции скрипта в предоставленных заготовке.