Usando Leap Motion e Ultraleap — MRTK2

Um Controlador de Movimento Bissexto é necessário para usar esse provedor de dados.

O leap motion Provedor de Dados permite o acompanhamento articulado da mão para VR e pode ser útil para a prototipagem rápida no editor. O provedor de dados pode ser configurado para usar o Controlador leap motion montado em um fone de ouvido ou colocado em uma mesa de frente para cima.

LeapMotionIntroGif

Esse provedor pode ser usado no editor e no dispositivo enquanto estiver na plataforma autônoma. Ele também pode ser usado no editor durante a plataforma UWP, mas NÃO em um build UWP.

Versão do MRTK Versões de módulos do Leap Motion Unity com suporte
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 (veja a observação abaixo)

Observação

Os Módulos do Unity 4.9.1 exigem o serviço de acompanhamento Gemini 5.2 ou superior. O plug-in do Unity V4.9.1 só tem suporte oficial no Unity 2019. Confira as notas de versão para 4.9.1.

Os Módulos do Unity foram renomeado como Plug-in do Unity na V5.0.0.

Versão do MRTK Versões do Plug-in do Ultraleap Unity com suporte
2.8.0 5.3.0 (confira a observação abaixo)

Observação

Não há suporte para as versões 5.0.0, 5.1.0 e 5.2.0 do Unity Plugin em nenhuma versão do MRTK. É recomendável que os usuários atualizem para 5.3.0. O Plug-in do Unity 5.3.0 requer o serviço de acompanhamento Gemini 5.2 ou superior.

Usando o rastreamento manual do Leap Motion (by Ultraleap) no MRTK

  1. Importando o MRTK e os Módulos do Leap Motion Unity/Plug-in do Unity

    • Instalar o software de rastreamento de movimento bissexto mais recente para obter o Serviço de Rastreamento se ele ainda não estiver instalado
    • Importe o Microsoft.MixedReality.Toolkit. Pacote de base para o projeto unity.
    • Baixar e importar a versão mais recente dos Módulos do Leap Motion Unity /Unity Plug-in para o projeto
      • Para módulos do Unity: importe apenas o pacote Core dentro do projeto
      • Para o Plug-in do Unity: importe apenas o pacote acompanhamento dentro do projeto. Há suporte apenas para .unitypackages por enquanto.

    Importante

    Unity preterido SelectionMode.OnlyUserModifiable após Unity 2019.4.19, que resulta no seguinte erro vindo do script Ultraleap Hotkeys.cs: Assets\Plugins\LeapMotion\Core\Editor\Hotkeys.cs(24,91): erro CS0619: 'SelectionMode.OnlyUserModifiable' está obsoleto: ''OnlyUserModifiable' está obsoleto. Em vez disso, use "Editável". (UnityUpgradeable) –> Editável'.

    Para resolver os problemas, altere o SelectionMode.OnlyUserModifiable para SelectionMode.Editable no script Hotkeys.cs localizado em Plugins/LeapMotion/Core/Editor/Hotkeys.cs.

  2. Integrar os Módulos do Leap Motion Unity /Plug-in do Unity com o MRTK

    • Depois que os Módulos do Unity/Plug-in do Unity estiverem no projeto, navegue até Realidade Misturada>Toolkit>Utilities>Leap Motion>Integrar Módulos do Leap Motion Unity.

    Observação

    A integração dos Módulos do Unity ao MRTK adiciona 10 definições de assembly ao projeto e adiciona referências ao Microsoft.MixedReality.Toolkit. Definição de assembly Providers.LeapMotion. Verifique se o Visual Studio está fechado.

    LeapMotionIntegration

  3. Adicionando o Provedor de Dados leap motion

    • Criar uma nova cena do Unity
    • Adicionar o MRTK à cena navegando até Realidade Misturada Toolkit>Add to Scene e Configure
    • Selecione o objeto de jogo MixedRealityToolkit na hierarquia e selecione Copiar e Personalizar para clonar o perfil de realidade misturada padrão.

    LeapMotionProfileClone

    • Selecionar o Perfil de Configuração de Entrada

    Input Configuration Profile 1

    • Selecione Clonar no perfil do sistema de entrada para habilitar a modificação.

    LeapMotionInputProfileClone

    • Abra a seção Provedores de Dados de Entrada, selecione Adicionar Provedor de Dados na parte superior, um novo provedor de dados será adicionado no final da lista. Abra o novo provedor de dados e defina o Tipo como Microsoft.MixedReality.Toolkit. LeapMotion.Input > LeapMotionDeviceManager

    Leap Add Data Provider

    • Selecione Clone para alterar as configurações padrão do Leap Motion.

    LeapDataProviderPreClone

    • O Provedor de Dados leap motion contém a LeapControllerOrientation propriedade que é o local do Controlador de Movimento Bissexto. LeapControllerOrientation.Headset indica que o controlador está montado em um fone de ouvido. LeapControllerOrientation.Desk indica que o controlador é colocado simples na mesa. O valor padrão é definido como LeapControllerOrientation.Headset.

    • Cada orientação do controlador contém propriedades de deslocamento:

      • As propriedades de deslocamento de orientação do headset espelham as propriedades de deslocamento no componente LeapXRServiceProvider. As LeapVRDeviceOffsetMode opções têm três opções: Padrão, Deslocamento de Cabeça Manual e Transformação. Se o modo de deslocamento for Padrão, um deslocamento não será aplicado ao Controlador de Movimento Bissexto. O modo de deslocamento de cabeça manual permite a modificação de três propriedades: LeapVRDeviceOffsetYe LeapVRDeviceTiltXLeapVRDeviceOffsetZ . Os valores da propriedade de deslocamento do eixo são aplicados ao posicionamento padrão do controlador. O modo de deslocamento Transformar contém a LeapVRDeviceOrigin propriedade Transformar que especifica uma nova origem para o Controlador de Movimento Bissexto.

      • A orientação desk contém a LeapControllerOffset propriedade que define a posição de âncora das mãos de salto de mesa. O deslocamento é calculado em relação à posição da câmera principal e o valor padrão é (0,-0.2, 0,35) para garantir que as mãos apareçam na frente e na exibição da câmera.

        Observação

        As propriedades de deslocamento no perfil são aplicadas uma vez quando o aplicativo é iniciado. Para modificar os valores durante o runtime, obtenha o Provedor de Serviços de Movimento Bissexto do Gerenciador de Dispositivos leap motion:

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistance e ExitPinchDistance são os limites de distância para detecção de gestos de pinçamento/toque de ar. O gesto de pinçamento é calculado medindo a distância entre a ponta do dedo indicador e a ponta do polegar. Para gerar um evento de entrada para baixo, o padrão EnterPinchDistance é definido como 0,02. Para aumentar um evento de entrada para cima (saindo da pinça), a distância padrão entre a ponta do dedo indicador e a ponta do polegar é 0,05.

    LeapControllerOrientation: Headset (Padrão)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation: Desk

    LeapDeskGif

    LeapDeskInspector

  4. Testando o Provedor de Dados leap motion

    • Depois que o Leap Motion Provedor de Dados tiver sido adicionado ao perfil do sistema de entrada, pressione play, mova a mão na frente do Controlador de Movimento Bissexto e você verá a representação conjunta da mão.
  5. Criando seu projeto

    • Navegar até as Configurações de build de > Arquivo
    • Somente builds autônomos têm suporte se estiverem usando o Provedor de Dados leap motion.
    • Para obter instruções sobre como usar um fone de ouvido Windows Mixed Reality para builds autônomos, consulte Como criar e implantar o MRTK em headsets WMR (autônomos).

Obtendo as articulações das mãos

Obter articulações usando o Provedor de Dados leap motion é idêntico à recuperação de articulação manual para uma Mão Articulada do MRTK. Para obter mais informações, consulte Controle manual.

Com o MRTK em uma cena de unity e o leap motion Provedor de Dados adicionado como um Provedor de Dados de entrada no perfil do Sistema de Entrada, crie um objeto de jogo vazio e anexe o script de exemplo a seguir.

Este script é um exemplo simples de como recuperar a pose da junta de palma em uma mão de movimento bissexto. Uma esfera segue a mão do Salto esquerdo enquanto um cubo segue a mão direita do Salto.

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;
        }
    }
}

Dica de fluxo de trabalho do editor do Unity

O uso do Provedor de Dados leap motion não requer um fone de ouvido VR. As alterações em um aplicativo MRTK podem ser testadas no editor com as mãos leap sem um fone de ouvido.

O Leap Motion Hands aparecerá no editor, sem um fone de ouvido VR conectado. Se estiver LeapControllerOrientation definido como Headset, o controlador leap motion precisará ser segurado por uma mão com a câmera voltada para a frente.

Observação

Se a câmera for movida usando chaves WASD no editor e for LeapControllerOrientationHeadset, as mãos não seguirão a câmera. As mãos só seguirão o movimento da câmera se um fone de ouvido VR estiver conectado enquanto o LeapControllerOrientationfone de ouvido estiver definido. As mãos leap seguirão o movimento da câmera no editor se a LeapControllerOrientation opção estiver definida como Desk.

Removendo o movimento de salto do Project

  1. Navegue até o Realidade Misturada Toolkit>Leap Motion>Separate Leap Motion Unity Modules
    • Deixe o Unity atualizar como referências no Microsoft.MixedReality.Toolkit. O arquivo Providers.LeapMotion.asmdef é modificado nesta etapa
  2. Fechar o Unity
  3. Feche Visual Studio, se estiver aberto
  4. Abra Explorador de Arquivos e navegue até a raiz do projeto do MRTK Unity
    • Excluir o diretório UnityProjectName/Library
    • Excluir o diretório UnityProjectName/Assets/Plugins/LeapMotion
    • Excluir o arquivo UnityProjectName/Assets/Plugins/LeapMotion.meta
  5. Reabrir o Unity

No Unity 2018.4, você pode notar que os erros ainda permanecem no console depois de excluir a Biblioteca e os Ativos do Leap Motion Core. Se os erros forem registrados após a reabertura, reinicie o Unity novamente.

Erros Comuns

O Leap Motion não foi integrado ao MRTK

Para testar se os Módulos do Leap Motion Unity foram integrados ao MRTK:

  • Navegar até Realidade Misturada Toolkit > status de integração de verificação de movimento > de salto de utilitários >
    • Isso exibirá uma janela pop-up com uma mensagem sobre se os Módulos do Leap Motion Unity foram integrados ou não ao MRTK.
  • Se a mensagem diz que os ativos não foram integrados:
    • Verifique se os módulos do Leap Motion Unity estão no projeto
    • Verifique se a versão adicionada tem suporte, consulte a tabela na parte superior da página para versões com suporte.
    • Experimente Realidade Misturada Toolkit > utilities > leap motion > integrar módulos do Leap Motion Unity

Falha ao copiar o HLAPI multijogador do assembly

Ao importar os Ativos Principais do Leap Motion Unity, esse erro pode ser registrado:

Copying assembly from 'Temp/com.unity.multiplayer-hlapi.Runtime.dll' to 'Library/ScriptAssemblies/com.unity.multiplayer-hlapi.Runtime.dll' failed

Solução

  • Uma solução de curto prazo é reiniciar o Unity. Consulte o problema 7761 para obter mais informações.

Cena de exemplo de movimento de salto

A cena de exemplo usa o perfil DefaultLeapMotionConfiguration e determina se o projeto do Unity foi configurado corretamente para usar o leap motion Provedor de Dados.

A cena de exemplo está contida no Microsoft.MixedReality.Toolkit. Pacote de exemplos no diretório MRTK/Examples/Demos/HandTracking/.

Veja também