【MagicLeap入門】ハンドトラッキングの使い方を学ぶ!


MagicLeap入門の第1弾はハンドトラッキングの使い方をご紹介します。

ハンドトラッキングを利用すれば、コントローラーを使用せずにオブジェクトの操作などをすることができます。

今回はUnityを利用して簡単なサンプルアプリを作成しながらハンドトラッキングを学んでいきます。

anyone-world-can-order-magic-leap-one-now-but-theres-catch.1280x600

※本記事ではMagicLeapの環境構築方法などは省略いたします。

※本記事はUnityを触ったことがある方向けの記事となっております。

※Unityの使用方法については以下記事をご参考ください。

参考記事)【Unity入門】ゲーム開発ができるようになる基礎知識まとめ

※MagicLeapの開発環境構築については以下をご参考ください。

参考記事)【MagicLeap公式】Install the Tools

参考記事)【MagicLeap公式】Get Started Unity

ハンドトラッキングとは

ハンドトラッキングとは、リアルタイムで手の動きや形を読み取る技術です。

MagicLeapではジェスチャーを読み取るだけでなく、手のキーポイント(掌の位置や親指の位置など)を追跡することができます。

現時点で読み取ることがジェスチャーは以下の8つです。

ハンドトラッキング
読み取り可能なジェスチャー

ハンドトラッキングのサンプルプログラムを動かしてイメージを掴んでみましょう。

インポートしてきたMagicLeapのフォルダ内のサンプルを実行して確認します。(MagicLeapをUnityで使用するための準備は改めてご紹介いたします。)

(任意フォルダ)→MagicLeap→Examples→HandTrackingを選択して実行してみます。

UnityHandGesture_sample
ハンドトラッキングのサンプル

GIFの通り、今現在のジェスチャーとキーポイントの位置をリアルタイムに認識することができます。

ハンドトラッキングを使用したサンプルプログラム作成

それでは実際にハンドトラッキングを利用したサンプルプログラムを作成していきましょう。

まずはじめに適当なシーンを作成してください。

次にデフォルトのMainCameraを(任意フォルダ)→MagicLeap→Core→Prefabs→MainCameraに置き換えてください。

たったこれだけでも動かすことができますが、これでは何も表示されないので何が起きているのかわかりません。

まずはキューブを自分の目の前に設置してみましょう。

大きさや位置は任意ですが、例では以下のように設定して設置します。

  • Position : (x,y,z) = (0,0,0.75)
  • Rotation : (x,y,z) = (0,0,0)
  • Scale : (x,y,z) = (0.1,0.1,0.1)

これで実行すると白いキューブが目の前に出現します。

cube_mlsample
Cubeを出力

次にジェスチャーによってキューブの色を変化させるスクリプトを作成します。

以下のスクリプト「ColorChanger.cs」を作成してください。

このスクリプトを任意の空オブジェクト(今回はColorChangerオブジェクトを作成)にアタッチして、色を変えたいオブジェクトをスクリプトにアタッチします。

これで特定のジェスチャーをすることでオブジェクトの色を変化させるサンプルプロジェクトが完成しました。

仕組みはとてもシンプルで、以下の手順でハンドジェスチャーを実現しています。

  1. 使用したいジェスチャーをEnumとして準備(10行目)
  2. Start関数内でハンドトラッキングをスタート(24行目)
  3. 使用したいジェスチャーをキーポーズとして格納(27〜33行目)
  4. 作成したキーポーズをMLHandsのキーポーズマネージャーに登録(36行目)
  5. 引数で渡したジェスチャーかどうかを判定するIsGesture関数を準備(83〜96行目)
  6. Update関数内でIsGestureを使用して特定のジェスチャーをしている時の処理を準備(49〜79行目)
  7. OnDestroy関数が呼び出された段階でハンドジェスチャーを終了(42行目)

※右手で判定を行いたい場合はUpdate関数内のif文の条件を「MLHands.Left」から「MLHands.Right」に変更するだけです。

基本的にMagicLeapが提供するAPIを利用するだけで簡単にハンドジェスチャーを実現することができます。

実際に実行して確認してみましょう。

handgesture_sample
ジェスチャーによって色が変わる

ジェスチャーごとに色が変化していることを確認できました。

まとめ

いかがでしたでしょうか。

MagicLeapではとても簡単にハンドジェスチャーを実装できることがおわかりいただけたでしょうか。

今回は最低限の機能のご紹介でしたが、次回以降ハンドジェスチャーのユースケースもご紹介していきたいと思っております。

XR-HUBでは引き続きMagicLeapの使い方をご紹介していきますのでぜひご参考ください。

本記事が少しでもMagicLeapやMR開発の共創につながれば幸いです。


ハンドトラッキング

この記事はいかがでしたか?
もし「参考になった」「面白かった」という場合は、応援シェアお願いします!

Twitterはじめました @FuruiYuya