Использование leap motion и ultraleap — MRTK2

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

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

LeapMotionIntroGif

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

  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 с MRTK

    • После того как модули Unity или подключаемый модуль Unity будут включены в проект, перейдите к Смешанная реальность>Toolkit>Utilities>Leap Motion>Integrate Unity Modules(Интеграция leap Motion Unity Modules).

    Примечание

    Интеграция модулей Unity в MRTK добавляет 10 определений сборок в проект и добавляет ссылки на определение сборки Microsoft.MixedReality.Toolkit.Providers.LeapMotion . Убедитесь, что среда Visual Studio закрыта.

    LeapMotionIntegration

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

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

    LeapMotionProfileClone

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

    Профиль входной конфигурации 1

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

    LeapMotionInputProfileClone

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

    Leap Add Data Provider

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

    LeapDataProviderPreClone

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

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

      • Свойства смещения ориентации гарнитуры зеркало свойства смещения в компоненте LeapXRServiceProvider. Имеет три параметра: Default, Manual Head Offset (Смещение LeapVRDeviceOffsetMode головы вручную) и Transform (Преобразование). Если используется режим смещения по умолчанию, смещение не будет применяться к контроллеру движения leap. Режим ручного смещения головы позволяет изменять три свойства: LeapVRDeviceOffsetYи LeapVRDeviceOffsetZLeapVRDeviceTiltX. Затем значения свойств смещения оси применяются к размещению контроллера по умолчанию. Режим смещения преобразования содержит 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: гарнитура (по умолчанию)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation:Столом

    LeapDeskGif

    LeapDeskInspector

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

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

    • Выберите 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 из проекта

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

См. также раздел