Leap Motion と Ultraleap の使用 — MRTK2

このデータ プロバイダーを使用するには、Leap Motion Controller が必要です。

Leap Motion Data Provider を使用すると、VR 用の多関節ハンド トラッキングを利用でき、エディターでの迅速なプロトタイプ作成に役立ちます。 このデータ プロバイダーは、ヘッドセットにマウントした、または机の上に表向きに置かれた Leap Motion Controller を使用するように構成できます。

LeapMotionIntroGif

このプロバイダーは、スタンドアロン プラットフォーム上のエディターおよびデバイスで使用できます。 UWP プラットフォーム上のエディターでも使用できますが、UWP ビルド内では使用できません。

MRTK バージョン Leap Motion Unity Modules のサポート対象バージョン
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 (下記の注を参照)

Note

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 (下記の注を参照)

Note

Unity プラグイン バージョン 5.0.0、5.1.0、5.2.0 は、MRTK のどのバージョンでもサポート されていません 。 ユーザーは 5.3.0 にアップグレードすることをお勧めします。 Unity プラグイン 5.3.0 には 、Gemini 5.2 以降の追跡サービスが必要です。

MRTK で Leap Motion (Ultraleap 製) のハンド トラッキングを使用する

  1. MRTK と Leap Motion Unity モジュールのインポート / Unity プラグイン

    • インストールしていない場合は、最新の Leap Motion Tracking Software をインストールして Tracking Service を取得します
    • Microsoft.MixedReality.Toolkit.Foundation パッケージを Unity プロジェクトにインポートします。
    • Leap Motion Unity モジュール/Unity プラグインの最新バージョンをダウンロードしてプロジェクトにインポートする
      • Unity モジュールの場合: プロジェクト内の Core パッケージのみをインポートします
      • Unity プラグインの場合: プロジェクト内の Tracking パッケージのみをインポートします。 現時点では、.unitypackage のみがサポートされています。

    重要

    Unity では、Unity 2019.4.19 以降、SelectionMode.OnlyUserModifiable が非推奨とされました。そのため、Ultraleap Hotkeys.cs スクリプトで次のエラーが発生します: Assets\Plugins\LeapMotion\Core\Editor\Hotkeys.cs(24,91): error CS0619: 'SelectionMode.OnlyUserModifiable' is obsolete: ''OnlyUserModifiable' is obsolete. Use 'Editable' instead. (UnityUpgradeable) -> Editable'.

    この問題を解決するには、Plugins/LeapMotion/Core/Editor/Hotkeys.cs にある Hotkeys.cs スクリプト内の SelectionMode.OnlyUserModifiable を SelectionMode.Editable に変更します。

  2. Leap Motion Unity モジュール/Unity プラグインを MRTK と統合する

    • Unity モジュール/Unity プラグインがプロジェクトに入ったら、Mixed Reality>Toolkit>Utilities>Leap Motion>Integrate Leap Motion Unity モジュールに移動します。

    Note

    Unity モジュールを MRTK に統合すると、プロジェクトに 10 個のアセンブリ定義が追加され、Microsoft.MixedReality.Toolkit.Providers.LeapMotion アセンブリ定義への参照が追加されます。 Visual Studio を終了していることを確認します。

    LeapMotionIntegration

  3. Leap Motion Data Provider を追加する

    • 新しい Unity シーンを作成します
    • [Mixed Reality Toolkit]>[シーンに追加して構成] に移動して、MRTK をシーンに追加します
    • 階層内の MixedRealityToolkit ゲーム オブジェクトを選択し、[コピーしてカスタマイズ] を選択して、既定の Mixed Reality プロファイルを複製します。

    LeapMotionProfileClone

    • [入力] 構成プロファイルを選択します

    入力構成プロファイル 1

    • 入力システム プロファイルで [複製] を選択して、変更を有効にします。

    LeapMotionInputProfileClone

    • [入力データ プロバイダー] セクションを開き、上部にある [データ プロバイダーの追加] を選択すると、新しいデータ プロバイダーが一覧の最後に追加されます。 新しいデータ プロバイダーを開き、[種類]Microsoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager に設定します

    Leap Add Data Provider

    • [複製] を選択して、既定の Leap Motion 設定を変更します。

    LeapDataProviderPreClone

    • Leap Motion Data Provider に含まれる LeapControllerOrientation プロパティは、Leap Motion Controller の場所を示します。 LeapControllerOrientation.Headset は、コントローラーがヘッドセットにマウントされていることを示します。 LeapControllerOrientation.Desk は、コントローラーが机の上に平らに置かれていることを示します。 既定値は LeapControllerOrientation.Headset に設定されています。

    • 各コントローラーの向きには、オフセット プロパティが含まれます。

      • Headset の向きのオフセット プロパティには、LeapXRServiceProvider コンポーネントのオフセット プロパティが反映されます。 LeapVRDeviceOffsetMode には、既定、手動ヘッド オフセット、変換の 3 つのオプションがあります。 オフセット モードが既定の場合、オフセットは Leap Motion Controller に適用されません。 手動ヘッド オフセット モードを使用すると、LeapVRDeviceOffsetYLeapVRDeviceOffsetZLeapVRDeviceTiltX の 3 つのプロパティを変更できます。 軸のオフセット プロパティの値は既定のコントローラーの配置に適用されます。 変換オフセット モードには、Leap Motion Controller の新しい向きを指定する LeapVRDeviceOrigin 変換プロパティが含まれます。

      • Desk の向きには、デスク リープ ハンドのアンカー位置を定義する LeapControllerOffset プロパティが含まれます。 オフセットは、メイン カメラの位置を基準として計算され、既定値は、ハンドがカメラのビュー内の正面に確実に表示される (0、-0.2、0.35) です。

        Note

        プロファイル内のオフセット プロパティは、アプリケーションの起動時に 1 回適用されます。 実行時に値を変更するには、Leap Motion Device Manager から Leap Motion Service Provider を取得します。

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistanceExitPinchDistance は、ピンチまたはエアタップのジェスチャ検出の距離のしきい値です。 ピンチ ジェスチャは、人差し指先端と親指先端の距離を測定して計算されます。 入力時ダウン イベントを発生させるには、既定の EnterPinchDistance を 0.02 に設定します。 入力時アップ イベント (ピンチの終了) を発生させるには、人差し指先端と親指先端の間の既定の距離を 0.05 にします。

    LeapControllerOrientation: Headset (既定)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation: Desk

    LeapDeskGif

    LeapDeskInspector

  4. Leap Motion Data Provider をテストする

    • Leap Motion Data Provider を入力システム プロファイルに追加した後、[再生] を押して、Leap Motion Controller の前で手を動かすと、ハンドの関節の表現が表示されます。
  5. プロジェクトをビルドする

手の関節を取得する

Leap Motion Data Provider を使用した関節の取得は、MRTK の多関節ハンドの関節取得と同じです。 詳細については、「ハンド トラッキング」を参照してください。

Unity シーンに MRTK、入力システム プロファイルに入力データ プロバイダーとして Leap Motion Data Provider を追加して、空のゲーム オブジェクトを作成し、次のサンプル スクリプトを添付します。

このスクリプトは、Leap Motion Hand で手のひらの関節のポーズを取得する方法のシンプルなサンプルです。 球体は左の 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 Data Provider を使用する場合、VR ヘッドセットは必要ありません。 MRTK アプリに対する変更は、ヘッドセットを使用せずに Leap ハンドを使用して、エディターでテストできます。

VR ヘッドセットが接続されていない状態で、エディターに Leap Motion Hands が表示されます。 LeapControllerOrientationHeadset に設定した場合は、カメラが正面になる状態で Leap Motion Controller を片手で持ち上げる必要があります。

Note

エディターで WASD キーを使用してカメラが動き、LeapControllerOrientationHeadset の場合、ハンドはカメラを追従しません。 LeapControllerOrientationHeadset に設定している間は、VR ヘッドセットが接続されている場合、ハンドはカメラの動きのみを追従します。 LeapControllerOrientationDesk に設定すると、エディターで Leap ハンドはカメラの動きを追従します。

プロジェクトから Leap Motion を削除する

  1. [Mixed Reality Toolkit]>[Leap Motion]>[別の Leap Motion Unity Modules] に移動します
    • この手順で Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef ファイル内の参照が変更されたときに Unity を更新します
  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 Core Assets を削除した後もコンソールにエラーが引き続き表示される可能性があります。 再度開いた後にエラーが記録された場合は、もう一度 Unity を再起動します。

一般的なエラー

Leap Motion が MRTK と統合されていません

Leap Motion Unity Modules が MRTK と統合されているかどうかをテストするには、次のようにします。

  • [Mixed Reality Toolkit] > [ユーティリティ] > [Leap Motion] > [統合の状態の確認] に移動します
    • ポップアップ ウィンドウに、Leap Motion Unity Modules が MRTK と統合されているかどうかについてのメッセージが表示されます。
  • 資産が統合されていないというメッセージが表示された場合は、次のようにします。
    • Leap Motion Unity Modules がプロジェクト内にあることを確認します
    • 追加されたバージョンがサポートされていることを確認します。サポート対象バージョンについては、ページの上部にある表を参照してください。
    • [Mixed Reality Toolkit] > [ユーティリティ] > [Leap Motion] > [Leap Motion Unity Modules の統合] を選択します

アセンブリの Multiplayer 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 を再起動することです。 詳細については、issue 7761 を参照してください。

Leap Motion のサンプル シーン

このサンプル シーンでは、DefaultLeapMotionConfiguration プロファイルを使用して、Unity プロジェクトが、Leap Motion Data Provider を使用するように正しく構成されているかどうかを判断します。

このサンプル シーンは、MRTK/Examples/Demos/HandTracking/ ディレクトリにある Microsoft.MixedReality.Toolkit.Examples パッケージに含まれています。

関連項目