共用方式為


使用 Leap Motion 和 Ultraleap — MRTK2

需要 Leap Motion 控制器才能使用此數據提供者。

Leap Motion Data Provider 支援 VR 的鉸接式手部追蹤,對於編輯器中的快速原型設計非常有用。 數據提供者可以配置為使用安裝在耳機上或面朝上放置在桌面上的 Leap Motion 控制器。

LeapMotion簡介Gif

此提供者可在獨立平台上在編輯器和裝置上使用。 它也可以在 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 外掛程式 V4.9.1 僅在 Unity 2019 上正式支援。 請參閱 4.9.1 的發行說明

Unity 模組在 V5.0.0 中更名為 Unity 外掛程式。

MRTK 版本 支援的 Ultraleap Unity 外掛程式版本
2.8.0 5.3.0 (見註)

注意事項

任何 MRTK 版本都 支援 Unity 外掛程式 5.0.0、5.1.0 和 5.2.0 版。 建議使用者升級至5.3.0。 Unity 外掛程式 5.3.0 需要 Gemini 5.2 追蹤服務或更高版本。

在 MRTK 中使用 Ultraleap 的 Leap Motion () 手部追蹤

  1. 匯入 MRTK 和 Leap Motion Unity 模組/Unity 外掛程式

    • 安裝最新的 Leap Motion 追蹤軟體以取得追蹤服務(如果尚未安裝)
    • Microsoft.MixedReality.Toolkit.Foundation 套件匯入 Unity 專案。
    • 下載最新版本的 Leap Motion Unity 模組 / Unity 外掛程式並將其匯入專案中
      • 對於 Unity 模組:僅匯入專案內 的核心 套件
      • 對於 Unity 插件:僅導入項目中的 跟踪 包。 目前僅支援 .unity套件。

    重要事項

    Unity 在 Unity 2019.4.19 之後棄用了 SelectionMode.OnlyUserModifiable,這會導致 Ultraleap Hotkeys.cs 腳本出現以下錯誤:Assets\Plugins\LeapMotion\Core\編輯器\Hotkeys.cs (24,91) :錯誤 CS0619:“SelectionMode.OnlyUserModifiable”已過時:“OnlyUserModifiable”已過時。 請改用「可編輯」。 (UnityUpgradeable) -> 可編輯'。

    若要解決這些問題,請在位於 Plugins/LeapMotion/Core/編輯器/Hotkeys.cs 的 Hotkeys.cs 指令碼中將 SelectionMode.OnlyUserModifiable 變更為 SelectionMode.Editable。

  2. 將 Leap Motion Unity 模組/Unity 外掛程式與 MRTK 整合

    • 在專案中出現 Unity 模組/Unity 外掛程式之後,流覽至 Mixed Reality>Toolkit>公用程式>Leap Motion>整合 Leap Motion Unity 模組

    注意事項

    Unity 模組 整合至 MRTK 會將 10 個元件定義新增至專案,並將參考新增至 Microsoft.MixedReality.Toolkit.Providers.LeapMotion 元件定義。 請確定 Visual Studio 已關閉。

    LeapMotion整合

  3. 新增 Leap Motion 資料提供者

    • 建立新的 Unity 場景
    • 流覽至 Mixed Reality 工具組>新增至場景並設定,將 MRTK 新增至場景
    • 選取階層中的 MixedRealityToolkit 遊戲物件,然後選取 [複製和自訂] 以複製預設的混合實境配置檔。

    LeapMotionProfile複製

    • 選取 輸入 組態設定檔

    輸入組態配置檔 1

    • 在輸入系統設定檔中選取複製以啟用修改。

    LeapMotionInputProfileClone

    • 開啟 [輸入資料提供者] 區段。 選取頂端的 [新增資料提供者] ,清單結尾會新增資料提供者。 開啟新的資料提供者,並將 [類型 ] 設定為 Microsoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager

    Leap 新增資料提供者

    • 選取 「複製 」以變更預設的 Leap Motion 設定。

    LeapDataProviderPreClone

    • Leap Motion 資料提供者 LeapControllerOrientation 包含屬性,這是 Leap Motion 控制器的位置。 LeapControllerOrientation.Headset 表示控制器已安裝在頭戴式裝置上。 LeapControllerOrientation.Desk 表示控制器平放在桌子上。 預設值設定為 LeapControllerOrientation.Headset

    • 每個控制器方向都包含偏移屬性:

      • 頭戴式裝置方向位移屬性會鏡像 LeapXRServiceProvider 元件中的位移屬性。 有 LeapVRDeviceOffsetMode 三個選項:預設、手動頭部偏移和變換。 如果偏移模式為預設,則不會將偏移套用至 Leap Motion 控制器。 「手動頭部偏移」模式允許修改三個性質: LeapVRDeviceOffsetYLeapVRDeviceOffsetZLeapVRDeviceTiltX。 然後,軸偏移屬性值會套用至預設控制器放置。 [轉換位移] 模式包含 LeapVRDeviceOrigin [轉換] 屬性,可指定 Leap Motion 控制器的新原點。

      • Desk 方向包含LeapControllerOffset定義桌面跳躍手錨點位置的屬性。 偏移量是相對於主相機位置計算的,預設值為 (0,-0.2、0.35) ,以確保指針出現在相機的前面和視野中。

        注意事項

        設定檔中的偏移屬性會在應用程式啟動時套用一次。 若要在執行階段修改值,請從 Leap Motion 裝置管理員取得 Leap Motion 服務提供者:

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistanceExitPinchDistance 是捏合/隔空點擊手勢偵測的距離閾值。 捏合手勢是透過測量食指尖和拇指尖之間的距離來計算的。 若要引發輸入關閉事件,預設值 EnterPinchDistance 設定為 0.02。 若要在結束捏) (引發 on input up 事件,食指尖與拇指尖之間的預設距離為 0.05。

    LeapControllerOrientation:耳機 (預設)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation:桌

    LeapDeskGif

    LeapDeskInspector

  4. 測試 Leap Motion 資料提供者

    • 將 Leap Motion Data Provider 新增至輸入系統設定檔後,按播放,將手移動到 Leap Motion 控制器前面,您應該會看到手的關節表示法。
  5. 建置您的專案

獲得手關節

使用 Leap Motion 資料提供者取得關節,與 MRTK 鉸接式手的手關節擷取相同。 如需詳細資訊,請參閱 手部追蹤

在 Unity 場景中使用 MRTK,並將 Leap Motion 資料提供者新增為輸入系統設定檔中的輸入資料提供者,請建立空的遊戲物件,並附加下列範例腳本。

此腳本是如何在 Leap Motion Hand 中擷取手掌關節姿勢的簡單範例。 球體跟隨左跳手,立方體跟隨右跳躍手。

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 Data Provider 不需要 VR 頭戴式裝置。 MRTK 應用程式的變更可以在編輯器中使用 Leap 手來測試,而不需要頭戴式裝置。

Leap Motion Hands 顯示在編輯器中,無需插入 VR 耳機。 如果設定 LeapControllerOrientation頭戴式裝置,則需要用一隻手舉起 Leap Motion 控制器,相機朝前。

注意事項

如果使用編輯器中的 WASD 鍵移動相機,且是LeapControllerOrientation頭戴式裝置,則手不會跟隨相機。 如果在設定耳機時插入 LeapControllerOrientation VR 頭戴式裝置,則指針會跟隨攝影機的移動。 如果將 設定為 DeskLeapControllerOrientation,則 Leap 指針將跟隨編輯器中的相機移動。

從專案中移除 Leap Motion

  1. 流覽至 Mixed Reality 工具組>Leap Motion>個別的 Leap Motion 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 整合:

  • 流覽至 Mixed Reality 工具組>公用程式 > Leap Motion > 檢查整合狀態
    • 隨即顯示快顯視窗,其中包含 Leap Motion Unity 模組是否與 MRTK 整合的訊息。
  • 如果訊息指出資產未整合:
    • 確保 Leap Motion Unity 模組位於專案中
    • 請確定新增的版本受支援,請參閱頁面頂端的表格以瞭解支援的版本。
    • 試用 Mixed Reality 工具組>公用程式 > 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

Leap Motion 範例場景

範例場景會使用 DefaultLeapMotionConfiguration 設定檔,並判斷 Unity 專案是否已正確設定為使用 Leap Motion 資料提供者。

範例場景包含在 MRTK/Examples/Demos/HandTracking/ 目錄中的 Microsoft.MixedReality.Toolkit.Examples 套件中。

另請參閱