Использование leap motion и ultraleap — MRTK2
Для использования этого поставщика данных требуется контроллер движения leap .
Поставщик данных о движении leap обеспечивает четкое отслеживание рук для виртуальной реальности и может быть полезен для быстрого создания прототипов в редакторе. Поставщик данных может быть настроен для использования контроллера движения leap, установленного на гарнитуре или размещенного на столе лицом вверх.
Этот поставщик можно использовать в редакторе и на устройстве на автономной платформе. Его также можно использовать в редакторе на платформе UWP, но НЕ в сборке UWP.
Версия MRTK | Поддерживаемые версии модулей Unity для leap motion |
---|---|
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 | Поддерживаемые версии подключаемого модуля Unity Ultraleap |
---|---|
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.
- Скачайте и импортируйте последнюю версию модуля Unity Leap Motion Unity Или подключаемого модуля Unity в проект.
- Для модулей Unity: импортируйте только пакет Core в проекте.
- Для подключаемого модуля Unity: импортируйте только пакет отслеживания в проекте. В настоящее время поддерживаются только unitypackages.
Важно!
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 с MRTK
- После того как модули Unity или подключаемый модуль Unity будут включены в проект, перейдите к Смешанная реальность>Toolkit>Utilities>Leap Motion>Integrate Unity Modules(Интеграция leap Motion Unity Modules).
Примечание
Интеграция модулей Unity в MRTK добавляет 10 определений сборок в проект и добавляет ссылки на определение сборки Microsoft.MixedReality.Toolkit.Providers.LeapMotion . Убедитесь, что среда Visual Studio закрыта.
Добавление поставщика данных leap motion
- Создайте сцену Unity
- Добавьте MRTK в сцену, перейдя к разделу Смешанная реальность Toolkit>Add to Scene and Configure (Добавить в сцену) и Configure (Добавить в сцену)
- Выберите игровой объект MixedRealityToolkit в иерархии и выберите Копировать и настроить , чтобы клонировать профиль смешанной реальности по умолчанию.
- Выбор профиля входной конфигурации
- Выберите Клонировать в системном профиле ввода, чтобы включить изменение.
- Откройте раздел Поставщики входных данных , выберите Добавить поставщика данных в верхней части, в конце списка будет добавлен новый поставщик данных. Откройте новый поставщик данных и задайте для параметра Типзначение Microsoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager.
- Выберите Клонировать , чтобы изменить параметры перемещения по умолчанию.
Поставщик данных leap motion содержит
LeapControllerOrientation
свойство , которое является расположением контроллера движения leap.LeapControllerOrientation.Headset
указывает, что контроллер подключен к гарнитуре.LeapControllerOrientation.Desk
указывает, что контроллер размещен на столе. Значение по умолчанию —LeapControllerOrientation.Headset
.Каждая ориентация контроллера содержит свойства смещения:
Свойства смещения ориентации гарнитуры зеркало свойства смещения в компоненте LeapXRServiceProvider. Имеет три параметра: Default, Manual Head Offset (Смещение
LeapVRDeviceOffsetMode
головы вручную) и Transform (Преобразование). Если используется режим смещения по умолчанию, смещение не будет применяться к контроллеру движения leap. Режим ручного смещения головы позволяет изменять три свойства:LeapVRDeviceOffsetY
иLeapVRDeviceOffsetZ
LeapVRDeviceTiltX
. Затем значения свойств смещения оси применяются к размещению контроллера по умолчанию. Режим смещения преобразования содержитLeapVRDeviceOrigin
свойство Transform, которое указывает новый источник для контроллера движения leap.Ориентация стола содержит
LeapControllerOffset
свойство , которое определяет положение привязки для перепрыгивая руки стола. Смещение вычисляется относительно положения камеры main, а значение по умолчанию — (0,-0,2, 0,35), чтобы убедиться, что руки отображаются впереди и в поле зрения камеры.Примечание
Свойства смещения в профиле применяются один раз при запуске приложения. Чтобы изменить значения во время выполнения, получите поставщик службы leap motion из диспетчер устройств Leap Motion:
LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>(); LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider;
EnterPinchDistance
иExitPinchDistance
— это пороговые значения расстояния для обнаружения жестов касания или касания воздуха. Жест сжатия вычисляется путем измерения расстояния между кончиком указательного пальца и кончиком большого пальца. Чтобы вызвать событие down при входе, по умолчаниюEnterPinchDistance
устанавливается значение 0,02. Чтобы вызвать событие on input up (выход из сжатия), расстояние по умолчанию между кончиком указательного пальца и кончиком большого пальца равно 0,05.
LeapControllerOrientation
: гарнитура (по умолчанию)LeapControllerOrientation
:СтоломТестирование поставщика данных leap motion
- После добавления поставщика данных leap motion в профиль системы ввода нажмите клавишу воспроизведения, переместите руку перед контроллером движения leap, и вы увидите совместное представление руки.
Создание проекта
- Выберите File > Build Settings (Файл > Параметры сборки).
- При использовании поставщика данных о движении leap поддерживаются только автономные сборки.
- Инструкции по использованию гарнитуры Windows Mixed Reality для автономных сборок см. в статье Сборка и развертывание MRTK в гарнитурах WMR (автономных) .
Получение суставов рук
Получение суставов с помощью поставщика данных о скачивном движении идентично получению суставов рук для mrTK- рук. Дополнительные сведения см. в разделе Отслеживание рук.
С помощью MRTK в сцене unity и поставщика данных Leap Motion, добавленного в качестве поставщика входных данных в профиле системы ввода, создайте пустой объект игры и вложите следующий пример скрипта.
Этот сценарий является простым примером того, как получить позу ладони в руке с прыжком. Сфера следует за левой рукой 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 не требует гарнитуры виртуальной реальности. Изменения в приложении MRTK можно протестировать в редакторе с помощью leap hands без гарнитуры.
Leap Motion Hands будет отображаться в редакторе, без гарнитуры VR подключены. LeapControllerOrientation
Если для задано значение Гарнитура, контроллер движения leap нужно будет удерживать одной рукой с камерой, обращенной вперед.
Примечание
Если камера перемещается с помощью клавиш WASD в редакторе LeapControllerOrientation
и имеет значение Гарнитура, руки не будут следовать за камерой. Руки будут следовать за перемещением камеры только в том случае, если гарнитура виртуальной реальности подключена, пока LeapControllerOrientation
установлена гарнитура. Стрелки Leap будут следовать за движением камеры в редакторе LeapControllerOrientation
, если для задано значение Desk.
Удаление движения leap из проекта
- Перейдите к Смешанная реальность Toolkit>Leap Motion>Separate Leap Motion Modules Unity
- Обновление Unity в виде ссылок в файле Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef на этом шаге
- Закрыть Unity
- Закройте Visual Studio, если она открыта
- Откройте проводник и перейдите к корню проекта MRTK Unity.
- Удаление каталога UnityProjectName/Library
- Удаление каталога UnityProjectName/Assets/Plugins/LeapMotion
- Удаление файла UnityProjectName/Assets/Plugins/LeapMotion.meta
- Повторное открытие Unity
В Unity 2018.4 вы можете заметить, что ошибки по-прежнему остаются в консоли после удаления библиотеки и основных ресурсов Leap Motion. Если ошибки регистрируются после повторного открытия, перезапустите Unity еще раз.
Общие ошибки
Leap Motion не интегрирован с MRTK
Чтобы проверить, интегрированы ли модули Leap Motion Unity с MRTK, выполните следующие действия.
- Перейдите к Смешанная реальность Toolkit > Utilities > Leap Motion Check > Status Integration
- Откроется всплывающее окно с сообщением о том, интегрированы ли модули Leap Motion Unity с MRTK.
- Если в сообщении указано, что ресурсы не были интегрированы:
- Убедитесь, что модули Leap Motion Unity находятся в проекте
- Убедитесь, что добавленная версия поддерживается. Сведения о поддерживаемых версиях см. в таблице в верхней части страницы.
- Попробуйте Смешанная реальность Toolkit > Utilities > Leap Motion > Интегрировать модули Leap Motion Unity
Сбой копирования многопользовательской игры сборки HLAPI
При импорте leap Motion Unity Core Assets эта ошибка может быть зарегистрирована:
Copying assembly from 'Temp/com.unity.multiplayer-hlapi.Runtime.dll' to 'Library/ScriptAssemblies/com.unity.multiplayer-hlapi.Runtime.dll' failed
Решение
- Краткосрочным решением является перезапуск Unity. Дополнительные сведения см. в проблеме 7761 .
Пример сцены leap motion
Пример сцены использует профиль DefaultLeapMotionConfiguration и определяет, правильно ли настроен проект Unity для использования поставщика данных leap motion.
Пример сцены содержится в пакете Microsoft.MixedReality.Toolkit.Examples в каталоге MRTK/Examples/Demos/HandTracking/ .