Usando Leap Motion e Ultraleap — MRTK2

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

O Provedor de Dados do Leap Motion permite o acompanhamento de mão articulado para VR e pode ser útil para prototipagem rápida no editor. O provedor de dados pode ser configurado para usar o Leap Motion Controller montado em um fone de ouvido ou colocado em um rosto de mesa 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 notas sobre a 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 Unity ultraleap com suporte
2.8.0 5.3.0 (veja 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 em nenhuma versão do MRTK. É recomendável que os usuários atualizem para a versão 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 (por Ultraleap) no MRTK

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

    • Instale o software de rastreamento de movimento leap mais recente para obter o serviço de rastreamento se ele ainda não estiver instalado
    • Importe o pacote Microsoft.MixedReality.Toolkit.Foundation para o projeto do Unity.
    • Baixar e importar a versão mais recente dos Módulos do Leap Motion Unity/Plug-in do Unity 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

    O Unity preteriu SelectionMode.OnlyUserModifiable após o Unity 2019.4.19, o que resulta no seguinte erro proveniente do script Hotkeys.cs ultraleap: 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 resolve os problemas, altere SelectionMode.OnlyUserModifiable para SelectionMode.Editable no script Hotkeys.cs localizado em Plug-ins/LeapMotion/Core/Editor/Hotkeys.cs.

  2. Integrar os Módulos do Leap Motion Unity/Plug-in do Unity ao 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 à definição de assembly Microsoft.MixedReality.Toolkit.Providers.LeapMotion . Verifique se o Visual Studio está fechado.

    LeapMotionIntegration

  3. Adicionando o provedor de dados leap motion

    • Criar uma nova cena do Unity
    • Adicione o MRTK à cena navegando até Realidade Misturada Kit de Ferramentas>Adicionar à Cena e Configurar
    • Selecione o objeto de jogo MixedRealityToolkit na hierarquia e selecione Copiar e Personalizar para clonar o perfil de realidade misturada padrão.

    LeapMotionProfileClone

    • Selecione o Perfil de Configuração de Entrada

    Perfil de Configuração de Entrada 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 Clonar para alterar as configurações padrão do Leap Motion.

    LeapDataProviderPreClone

    • O Provedor de Dados do 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 espelho as propriedades de deslocamento no componente LeapXRServiceProvider. O LeapVRDeviceOffsetMode tem três opções: Padrão, Deslocamento de Cabeça e Transformação Manual. Se o modo de deslocamento for Padrão, um deslocamento não será aplicado ao Controlador de Movimento Bissexto. O modo deslocamento de cabeçalho manual permite a modificação de três propriedades: LeapVRDeviceOffsetYe LeapVRDeviceTiltXLeapVRDeviceOffsetZ . Os valores da propriedade de deslocamento do eixo são então aplicados ao posicionamento padrão do controlador. O modo de deslocamento Transformar contém a LeapVRDeviceOrigin propriedade Transform 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 à main posição da câmera 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 leap motion do leap motion Gerenciador de Dispositivos:

        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çagem/toque de ar. O gesto de pinçagem é 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 (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:Mesa

    LeapDeskGif

    LeapDeskInspector

  4. Testando o provedor de dados leap motion

    • Depois que o Provedor de Dados do Leap Motion tiver sido adicionado ao perfil do sistema de entrada, pressione play, mova a mão na frente do Controlador de Movimento Bissexto e você deverá 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 do Leap Motion.
    • Para obter instruções sobre como usar um headset Windows Mixed Reality para compilações autônomas, consulte Compilando e implantando o MRTK em headsets WMR (autônomos).

Obtendo as articulações das mãos

Obter articulações usando o Provedor de Dados do Leap Motion é idêntico à recuperação conjunta manual de uma Mão Articulada do MRTK. Para obter mais informações, confira Acompanhamento manual.

Com o MRTK em uma cena do Unity e o Provedor de Dados do Leap Motion adicionados 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 um Leap Motion Hand. Uma esfera segue a mão leap esquerda enquanto um cubo segue a mão direita 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;
        }
    }
}

Dica de fluxo de trabalho do editor do Unity

O uso do Provedor de Dados do 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 o LeapControllerOrientation estiver definido como Headset, o controlador leap motion precisará ser mantido por uma mão com a câmera voltada para a frente.

Observação

Se a câmera for movida usando as teclas WASD no editor e o LeapControllerOrientation for Headset, 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 LeapControllerOrientation estiver definido Headset. As mãos leap seguirão o movimento da câmera no editor se o LeapControllerOrientation estiver definido como Desk.

Removendo o Leap Motion do Projeto

  1. Navegue até o Realidade Misturada Módulos>do Leap Motion Leap Motion > Separados do Leap Motion Unity
    • Permitir que o Unity atualize como referências no arquivo Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef será modificado nesta etapa
  2. Fechar o Unity
  3. Feche o Visual Studio, se ele 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 observar 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:

  • Navegue até Realidade Misturada status de integração do Leap Motion > Check dos utilitários do Kit de Ferramentas >>
    • 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 utilitários do Kit de Ferramentas >> 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. Confira o problema 7761 para obter mais informações.

Cena de exemplo de movimento bissexto

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

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

Confira também