Использование Leap Motion и Ultraleap — MRTK2
Для использования этого поставщика данных требуется контроллер движения Leap .
Поставщик данных Leap Motion позволяет сформулировать отслеживание рук для виртуальной реальности и может быть полезно для быстрого создания прототипов в редакторе. Поставщик данных можно настроить для использования контроллера движения Leap, подключенного к гарнитуре или помещенного на стол лицом вверх.
Этот поставщик можно использовать в редакторе и на устройстве на автономной платформе. Его также можно использовать в редакторе на платформе UWP, но не в сборке UWP.
Версия MRTK | Поддерживаемые версии модулей Leap Motion Unity |
---|---|
2.6.x | 4.5.0, 4.5.1 |
2.7.0 - 2.7.2 | 4.5.0, 4.5.1, 4.6.0, 4.7.0, 4.7.1, 4.8.0 |
2.7.3 | 4.5.0, 4.5.1, 4.6.0, 4.7.0, 4.7.1, 4.8.0, 4.9.1 (см. примечание ниже) |
Примечание
Для модулей Unity 4.9.1 требуется служба отслеживания Gemini 5.2 или более поздней версии. Подключаемый модуль Unity версии 4.9.1 официально поддерживается только в Unity 2019. См. заметки о выпуске 4.9.1.
Модули Unity были переименованы в подключаемый модуль Unity версии 5.0.0.
Версия MRTK | Поддерживаемые версии подключаемого модуля Ultraleap Unity |
---|---|
2.8.0 | 5.3.0 (см. примечание ниже) |
Примечание
Подключаемые модули Unity 5.0.0, 5.1.0 и 5.2.0 не поддерживаются ни в одной версии MRTK. Пользователям рекомендуется обновить версию до версии 5.3.0. Для подключаемого модуля Unity 5.3.0 требуется служба отслеживания Gemini 5.2 или более поздней версии.
Использование leap Motion (от Ultraleap) отслеживания рук в MRTK
Импорт MRTK и модулей Unity Leap Motion / Подключаемый модуль Unity
- Установите последнюю версию программного обеспечения для отслеживания движения leap , чтобы получить службу отслеживания, если она еще не установлена
- Импортируйте пакет Microsoft.MixedReality.Toolkit.Foundation в проект Unity.
- Скачайте и импортируйте последнюю версию модулей Leap Motion Unity или подключаемого модуля Unity в проект
- Для модулей Unity: импортируйте только основной пакет в проекте
- Для подключаемого модуля Unity: импортируйте только пакет отслеживания в проекте. Сейчас поддерживаются только unitypackage.
Важно!
Unity не рекомендуется использовать SelectionMode.OnlyUserModifiable после Unity 2019.4.19, что приводит к следующей ошибке из скрипта Ultraleap Hotkeys.cs: Assets\Plugins\LeapMotion\Core\Editor\Hotkeys.cs(24,91): ошибка CS0619: SelectionMode.OnlyUserModifiable устарела: "OnlyUserModifiable" устарела. Вместо этого используйте "Редактируемое". (UnityUpgradeable) —> редактируемый.
Чтобы устранить проблемы, измените SelectionMode.OnlyUserModifiable на SelectionMode.Editable в скрипте Hotkeys.cs, расположенном в plugins/LeapMotion/Core/Editor/Hotkeys.cs.
Интеграция модулей Unity Leap Motion и подключаемого модуля Unity с MRTK
- После того как подключаемый модуль Unity или подключаемый модуль Unity находятся в проекте, перейдите к Смешанная реальность>Toolkit>Utilities>Leap Motion>Integrate Leap Motion Modules.
Примечание
Интеграция модулей Unity с MRTK добавляет в проект 10 определений сборок и добавляет ссылки на определение сборки Microsoft.MixedReality.Toolkit.Providers.LeapMotion . Убедитесь, что среда Visual Studio закрыта.
Добавление поставщика данных перемещения leap
- Создайте сцену Unity
- Добавьте MRTK в сцену, перейдя к Смешанная реальность Toolkit>Add to Scene and Configure
- Выберите игровой объект MixedRealityToolkit в иерархии и выберите " Копировать и настроить" , чтобы клонировать профиль смешанной реальности по умолчанию.
- Выбор профиля конфигурации ввода
- Выберите "Клонировать " во входном системном профиле, чтобы включить изменение.
- Откройте раздел "Поставщики входных данных ", выберите " Добавить поставщик данных " в верхней части списка, в конце списка будет добавлен новый поставщик данных. Откройте новый поставщик данных и задайте для типаMicrosoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager
- Выберите "Клонировать ", чтобы изменить параметры перемещения leap по умолчанию.
Поставщик данных движения Leap содержит
LeapControllerOrientation
свойство, которое является расположением контроллера движения Leap.LeapControllerOrientation.Headset
указывает, что контроллер подключен к гарнитуре.LeapControllerOrientation.Desk
указывает, что контроллер помещается на стол. Значение по умолчанию —LeapControllerOrientation.Headset
.Каждая ориентация контроллера содержит свойства смещения:
Свойства смещения ориентации гарнитуры отражают свойства смещения в компоненте LeapXRServiceProvider. Доступны
LeapVRDeviceOffsetMode
три варианта: по умолчанию, смещение головы вручную и преобразование. Если используется режим смещения по умолчанию, смещение не будет применено к контроллеру движения Leap. Режим смещения головы вручную позволяет изменять три свойства:LeapVRDeviceOffsetY
LeapVRDeviceOffsetZ
иLeapVRDeviceTiltX
. Затем значения свойств смещения оси применяются к размещению контроллера по умолчанию. Режим смещения преобразования содержитLeapVRDeviceOrigin
свойство Transform, указывающее новый источник для контроллера движения Leap.Ориентация стола содержит
LeapControllerOffset
свойство, определяющее позицию привязки столовых прыжок. Смещение вычисляется относительно основной позиции камеры, а значение по умолчанию — (0,-0,2, 0,35), чтобы убедиться, что руки отображаются перед камерой и в представлении камеры.Примечание
Свойства смещения в профиле применяются один раз при запуске приложения. Чтобы изменить значения во время выполнения, получите поставщик службы перемещения leap из диспетчер устройств leap motion:
LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>(); LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider;
EnterPinchDistance
иExitPinchDistance
являются порогами расстояния для обнаружения жестов касания или касания. Жест сжатия вычисляется путем измерения расстояния между кончиком указательного пальца и кончиком большого пальца. Чтобы вызвать событие уменьшения входных данных, значение по умолчаниюEnterPinchDistance
равно 0,02. Чтобы вызвать событие ввода (выход из сжатия), расстояние по умолчанию между кончиком индекса и кончиком пальца по умолчанию равно 0,05.
LeapControllerOrientation
: гарнитура (по умолчанию)LeapControllerOrientation
: DeskТестирование поставщика данных leap Motion
- После добавления поставщика данных leap Motion Data в профиль системы ввода нажмите клавишу PLAY, переместите руку перед контроллером движения Leap, и вы должны увидеть совместное представление руки.
Создание проекта
- Выберите File > Build Settings (Файл > Параметры сборки).
- Поддерживаются только автономные сборки, если используется поставщик данных leap Motion.
- Инструкции по использованию гарнитуры Windows Mixed Reality для автономных сборок см. в статье "Сборка и развертывание MRTK в гарнитурах WMR (автономная версия)".
Получение рук суставов
Получение суставов с помощью поставщика данных движения Leap идентично получению руками для сформулированной руки MRTK. Дополнительные сведения см. в разделе "Отслеживание рук".
С помощью MRTK в сцене unity и поставщика данных leap motion, добавленного в качестве поставщика входных данных в профиле системы ввода, создайте пустой игровой объект и присоедините следующий пример сценария.
Этот сценарий является простым примером того, как получить позу ладони в Leap Motion Hand. Сфера следует левой стрелке Leap, а куб следует правой рукой Leap.
using Microsoft.MixedReality.Toolkit;
using Microsoft.MixedReality.Toolkit.Input;
using Microsoft.MixedReality.Toolkit.Utilities;
using System.Collections.Generic;
using UnityEngine;
public class LeapHandJoints : MonoBehaviour, IMixedRealityHandJointHandler
{
private GameObject leftHandSphere;
private GameObject rightHandCube;
private void Start()
{
// Register the HandJointHandler as a global listener
CoreServices.InputSystem.RegisterHandler<IMixedRealityHandJointHandler>(this);
// Create a sphere to follow the left hand palm position
leftHandSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
leftHandSphere.transform.localScale = Vector3.one * 0.03f;
// Create a cube to follow the right hand palm position
rightHandCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
rightHandCube.transform.localScale = Vector3.one * 0.03f;
}
public void OnHandJointsUpdated(InputEventData<IDictionary<TrackedHandJoint, MixedRealityPose>> eventData)
{
if (eventData.Handedness == Handedness.Left)
{
Vector3 leftHandPalmPosition = eventData.InputData[TrackedHandJoint.Palm].Position;
leftHandSphere.transform.position = leftHandPalmPosition;
}
if (eventData.Handedness == Handedness.Right)
{
Vector3 rightHandPalmPosition = eventData.InputData[TrackedHandJoint.Palm].Position;
rightHandCube.transform.position = rightHandPalmPosition;
}
}
}
Совет по рабочему процессу редактора Unity
Для использования поставщика данных leap Motion не требуется гарнитура VR. Изменения в приложении MRTK можно протестировать в редакторе с помощью руки Leap без гарнитуры.
Leap Motion Hands появится в редакторе, без гарнитуры VR, подключенной. LeapControllerOrientation
Если задано значение "Гарнитура", контроллер движения Leap должен быть удерживается одной рукой с камерой вперед.
Примечание
Если камера перемещается с помощью клавиш WASD в редакторе и LeapControllerOrientation
гарнитуры, руки не будут следовать за камерой. Руки будут следовать за движением камеры только в том случае, если гарнитура VR подключена во время LeapControllerOrientation
установки гарнитуры. Прыжок руки будут следовать за движением камеры в редакторе, если LeapControllerOrientation
установлен на стол.
Удаление движения leap из Project
- Перейдите к модулям Смешанная реальность Toolkit>Leap MotionSeparate Leap Motion> Unity
- Пусть Unity обновляется в виде ссылок в файле Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef на этом шаге
- Закрытие Unity
- Закройте Visual Studio, если оно открыто
- Откройте проводник и перейдите к корню проекта Unity MRTK
- Удаление каталога UnityProjectName/Library
- Удаление каталога UnityProjectName/Assets/Plugins/LeapMotion
- Удаление метафайла UnityProjectName/Assets/Plugins/LeapMotion.meta
- Повторное открытие Unity
В Unity 2018.4 вы можете заметить, что ошибки по-прежнему остаются в консоли после удаления библиотеки и основных ресурсов Leap Motion Core. Если ошибки регистрируются после повторного открытия, перезапустите Unity еще раз.
Общие ошибки
Leap Motion не интегрирован с MRTK
Чтобы проверить, интегрированы ли модули Leap Motion Unity с MRTK, выполните следующие действия.
- Перейдите к состоянию интеграции Смешанная реальность Toolkit > Utilities > Leap Motion > Check
- Откроется всплывающее окно с сообщением о том, интегрированы ли модули Leap Motion Unity с MRTK.
- Если в сообщении указано, что ресурсы не были интегрированы:
- Убедитесь, что модули Leap Motion Unity находятся в проекте
- Убедитесь, что добавленная версия поддерживается, см. таблицу в верхней части страницы поддерживаемых версий.
- Попробуйте Смешанная реальность Toolkit > Utilities > Leap Motion Интегрировать модули Leap Motion > Unity
Сбой копирования многопользовательской сборки HLAPI
При импорте основных ресурсов Leap Motion Unity эта ошибка может быть зарегистрирована:
Copying assembly from 'Temp/com.unity.multiplayer-hlapi.Runtime.dll' to 'Library/ScriptAssemblies/com.unity.multiplayer-hlapi.Runtime.dll' failed
Решение
- Краткосрочное решение — перезапустить Unity. Дополнительные сведения см. в выпуске 7761 .
Пример сцены прыжкового движения
В примере сцены используется профиль DefaultLeapMotionConfiguration и определяет, правильно ли настроен проект Unity для использования поставщика данных движения leap.
Пример сцены содержится в пакете Microsoft.MixedReality.Toolkit.Examples в каталоге MRTK/Examples/Demos/HandTracking/ .