需要 Leap Motion 控制器才能使用此數據提供者。
Leap Motion Data Provider 支援 VR 的鉸接式手部追蹤,對於編輯器中的快速原型設計非常有用。 數據提供者可以配置為使用安裝在耳機上或面朝上放置在桌面上的 Leap Motion 控制器。
此提供者可在獨立平台上在編輯器和裝置上使用。 它也可以在 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 () 手部追蹤
匯入 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。
將 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 已關閉。
新增 Leap Motion 資料提供者
- 建立新的 Unity 場景
- 流覽至 Mixed Reality 工具組>新增至場景並設定,將 MRTK 新增至場景
- 選取階層中的 MixedRealityToolkit 遊戲物件,然後選取 [複製和自訂] 以複製預設的混合實境配置檔。
- 選取 輸入 組態設定檔
- 在輸入系統設定檔中選取複製以啟用修改。
- 開啟 [輸入資料提供者] 區段。 選取頂端的 [新增資料提供者] ,清單結尾會新增資料提供者。 開啟新的資料提供者,並將 [類型 ] 設定為 Microsoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager
- 選取 「複製 」以變更預設的 Leap Motion 設定。
Leap Motion 資料提供者
LeapControllerOrientation包含屬性,這是 Leap Motion 控制器的位置。LeapControllerOrientation.Headset表示控制器已安裝在頭戴式裝置上。LeapControllerOrientation.Desk表示控制器平放在桌子上。 預設值設定為LeapControllerOrientation.Headset。每個控制器方向都包含偏移屬性:
頭戴式裝置方向位移屬性會鏡像 LeapXRServiceProvider 元件中的位移屬性。 有
LeapVRDeviceOffsetMode三個選項:預設、手動頭部偏移和變換。 如果偏移模式為預設,則不會將偏移套用至 Leap Motion 控制器。 「手動頭部偏移」模式允許修改三個性質:LeapVRDeviceOffsetY、LeapVRDeviceOffsetZ和LeapVRDeviceTiltX。 然後,軸偏移屬性值會套用至預設控制器放置。 [轉換位移] 模式包含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;
EnterPinchDistance和ExitPinchDistance是捏合/隔空點擊手勢偵測的距離閾值。 捏合手勢是透過測量食指尖和拇指尖之間的距離來計算的。 若要引發輸入關閉事件,預設值EnterPinchDistance設定為 0.02。 若要在結束捏) (引發 on input up 事件,食指尖與拇指尖之間的預設距離為 0.05。
LeapControllerOrientation:耳機 (預設)
LeapControllerOrientation:桌
測試 Leap Motion 資料提供者
- 將 Leap Motion Data Provider 新增至輸入系統設定檔後,按播放,將手移動到 Leap Motion 控制器前面,您應該會看到手的關節表示法。
建置您的專案
- 導覽至 檔案 > 建置設定
- 如果使用 Leap Motion 資料提供者,則僅支援獨立組建。
- 如需如何使用 Windows Mixed Reality 頭戴式裝置進行獨立組建的指示,請參閱 建置 MRTK 並將其部署至 WMR 頭戴式裝置 (獨立) 。
獲得手關節
使用 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
- 流覽至 Mixed Reality 工具組>Leap Motion>個別的 Leap Motion Unity 模組
- 讓 Unity 重新整理,因為在此步驟中會修改 Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef 檔案中的參考
- 關閉 Unity
- 關閉 Visual Studio(如果已開啟)
- 開啟檔案總管,然後流覽至 MRTK Unity 專案的根目錄
- 刪除 UnityProjectName/Library 目錄
- 刪除 UnityProjectName/Assets/Plugins/LeapMotion 目錄
- 刪除 UnityProjectName/Assets/Plugins/LeapMotion.meta 檔案
- 重新開啟 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 套件中。