2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MagicLeapToolKitを利用したハンドジェスチャの検出方法

Last updated at Posted at 2020-08-21

以前の記事で紹介したジェスチャの取得方法はMagicLeapUnityPackageのコアシステムを利用したジェスチャの取得方法

それとはべつにMagicLeapToolKitを利用したハンドジェスチャの取得方法を紹介します( かなりお手軽なのでおすすめです )

環境

LuminOS : 0.98.11
LuminSDK : 0.24.1
MagicLeapUnityPackage : 0.24.2
Unity : 2019.3.7.f1
MagicLeapToolKit : 特にバージョンが設定されていないのでこちらから最新版をDL

出来上がり

以下のようにジェスチャを取得できる機能を作成します

シーンの作成 ( 下準備 )

こちらの記事で作成したCameraRigまたは自前で作成したCameraをシーンに配置しておいてください
こちらは最低限の準備でよいと思います

次にシーンにGameObjectを作成( とりあえずHandInputとします )を作成し、MagicLeap-Tools > Code > Input > Hands ディレクトリにあるHandInputをアタッチします
Img_0.JPG

Img_1.JPG

次に受け取ったジェスチャイベントをログに出力したいので MagicLeap-Tools > Examples > RuntimeConsole > Scenes にあるRuntimeConsoleシーンをHierarchy上にドラッグ&ドロップし、その中からRuntimeConsoleオブジェクトを自分のテスト用シーンに移動します
Img_4.JPG

Img_3.JPG

これで下準備が完了しました。

スクリプトの作成

ここからがメインになります、といってもやることは簡単でHandInputにジェスチャを取得するためのイベントを登録するだけです

using MagicLeapTools;
using UnityEngine;
using UnityEngine.XR.MagicLeap;


/// <summary>
/// MLTKの手のジェスチャ取得.
/// </summary>
public class Sample : MonoBehaviour
{

    void Start()
    {
        HandInput.OnReady += () =>
        {
            HandInput.Right.Gesture.OnKeyPoseChanged += OnHandGesturePoseChanged;
            HandInput.Left.Gesture.OnKeyPoseChanged += OnHandGesturePoseChanged;
        };
    }


    private void OnHandGesturePoseChanged(
        ManagedHand hand,
        MLHandTracking.HandKeyPose pose)
    {
        // 左右の判定はこんな感じ.
        string lr = hand.Hand.Type == MLHandTracking.HandType.Left ? "left" : "right";
        Debug.Log($"{pose} {lr}");

        // 取得されたジェスチャ.
        switch (pose)
        {
            case MLHandTracking.HandKeyPose.C: break;
            case MLHandTracking.HandKeyPose.Finger: break;
            case MLHandTracking.HandKeyPose.Fist: break;
            case MLHandTracking.HandKeyPose.L: break;
            case MLHandTracking.HandKeyPose.Ok: break;
            case MLHandTracking.HandKeyPose.Pinch: break;
            case MLHandTracking.HandKeyPose.Thumb: break;
            case MLHandTracking.HandKeyPose.NoHand: break;
            case MLHandTracking.HandKeyPose.NoPose: break;
            case MLHandTracking.HandKeyPose.OpenHand: break;
        }
    }


}


↑のスクリプトで問題なくジェスチャを取得することが出来ると思います

Img_2.JPG

スクリプトの解説

まずStart()でHandInput.OnReadyのイベント発火時にHandInput.Right, Left双方のOnKeyPoseChangedイベントへのリスナーの登録をします
リスナーは ManagedHand型とMLHandTracking.HandKeyPose型を引数に持つメソッドです

あとがき

UniRx等を利用して複数のジェスチャを組み合わせての一連のコマンドなどを作ってみるとジェスチャの幅が広がるかも

2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?