Использование Leap Motion и Ultraleap — MRTK2

Для использования этого поставщика данных требуется контроллер движения Leap .

Поставщик данных Leap Motion позволяет сформулировать отслеживание рук для виртуальной реальности и может быть полезно для быстрого создания прототипов в редакторе. Поставщик данных можно настроить для использования контроллера движения Leap, подключенного к гарнитуре или помещенного на стол лицом вверх.

LeapMotionIntroGif

Этот поставщик можно использовать в редакторе и на устройстве на автономной платформе. Его также можно использовать в редакторе на платформе 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

  1. Импорт MRTK и модулей Unity Leap Motion / Подключаемый модуль Unity

    Важно!

    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.

  2. Интеграция модулей 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 закрыта.

    LeapMotionIntegration

  3. Добавление поставщика данных перемещения leap

    • Создайте сцену Unity
    • Добавьте MRTK в сцену, перейдя к Смешанная реальность Toolkit>Add to Scene and Configure
    • Выберите игровой объект MixedRealityToolkit в иерархии и выберите " Копировать и настроить" , чтобы клонировать профиль смешанной реальности по умолчанию.

    LeapMotionProfileClone

    • Выбор профиля конфигурации ввода

    Input Configuration Profile 1

    • Выберите "Клонировать " во входном системном профиле, чтобы включить изменение.

    LeapMotionInputProfileClone

    • Откройте раздел "Поставщики входных данных ", выберите " Добавить поставщик данных " в верхней части списка, в конце списка будет добавлен новый поставщик данных. Откройте новый поставщик данных и задайте для типаMicrosoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager

    Leap Add Data Provider

    • Выберите "Клонировать ", чтобы изменить параметры перемещения leap по умолчанию.

    LeapDataProviderPreClone

    • Поставщик данных движения Leap содержит LeapControllerOrientation свойство, которое является расположением контроллера движения Leap. LeapControllerOrientation.Headset указывает, что контроллер подключен к гарнитуре. LeapControllerOrientation.Desk указывает, что контроллер помещается на стол. Значение по умолчанию — LeapControllerOrientation.Headset.

    • Каждая ориентация контроллера содержит свойства смещения:

      • Свойства смещения ориентации гарнитуры отражают свойства смещения в компоненте LeapXRServiceProvider. Доступны LeapVRDeviceOffsetMode три варианта: по умолчанию, смещение головы вручную и преобразование. Если используется режим смещения по умолчанию, смещение не будет применено к контроллеру движения Leap. Режим смещения головы вручную позволяет изменять три свойства: LeapVRDeviceOffsetYLeapVRDeviceOffsetZ и 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: гарнитура (по умолчанию)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation: Desk

    LeapDeskGif

    LeapDeskInspector

  4. Тестирование поставщика данных leap Motion

    • После добавления поставщика данных leap Motion Data в профиль системы ввода нажмите клавишу PLAY, переместите руку перед контроллером движения Leap, и вы должны увидеть совместное представление руки.
  5. Создание проекта

Получение рук суставов

Получение суставов с помощью поставщика данных движения 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

  1. Перейдите к модулям Смешанная реальность Toolkit>Leap MotionSeparate Leap Motion> Unity
    • Пусть Unity обновляется в виде ссылок в файле Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef на этом шаге
  2. Закрытие Unity
  3. Закройте Visual Studio, если оно открыто
  4. Откройте проводник и перейдите к корню проекта Unity MRTK
    • Удаление каталога UnityProjectName/Library
    • Удаление каталога UnityProjectName/Assets/Plugins/LeapMotion
    • Удаление метафайла UnityProjectName/Assets/Plugins/LeapMotion.meta
  5. Повторное открытие 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/ .

См. также статью