デバイス倉庫からLeapMotionを久々に引っ張りだしたついでに
Unity + OculusRiftDK2 + LeapMotionで、こんな物を作ってみました
実行ファイル:
https://dl.dropboxusercontent.com/u/30427841/UnityChanRiftLiftSkirt.zip
出来はさておき、初めてのLeapMotionアプリだったので、
忘れないうちに自分用メモを書いておきます
※ 題名にもありますが、バージョンはV2 Betaです。
また、UnityPro版を使用したので、Free版とは一部異なるかもしれません…
参考サイト:
手のボーントラッキングが可能になった Leap Motion SDK V2 Beta の Unity サンプルについて調べてみた - 凹みTips
HandContollerの設定
LeapMotionによるトラッキング・手のCGモデル表示は、
プレハブ1つを追加・設定するだけです。簡単です。
まず、LeapMotionパッケージをインポートし、その中にある
HandControllerをシーンに置いてください(LeapMotion/Prefabs/HandController)
次に、HandController内の表示モデルと物理モデルを設定してください
表示モデルと物理モデルは、Prefabs下のHandGraphicsとHandPhysicsにあります。
それぞれ数パターン用意されています。
設定後に実行すると、トラッキングに応じて手のCGモデルが表示されると思います
ジェスチャーの使い方(スワイプ)
LeapMotionでは検出可能なジェスチャーが幾つか用意されています。
今回は、その中のスワイプを使用しました。
(その他のジェスチャーについては、以下のリンクを参照して下さい)
Downloads - Ultraleap
ジェスチャーの検出有効化
まず、検出したいジェスチャーの検出フラグを有効にする必要があります。
スワイプの場合は、以下のコードで有効にすることができます。
private HandController _HandController; _LeapController = _HandController.LeapController; _LeapController.EnableGesture(Gesture.GestureType.TYPESWIPE);
ジェスチャー検出情報の取得
以下のコードで、検出したジェスチャーを取得することができます。
var gestures = _LeapController.Frame ().Gestures(); SwipeGesture swipeGesture = null; foreach(var gesture in gestures) { if(gesture.Type == Gesture.GestureType.TYPESWIPE) { swipeGesture = new SwipeGesture(gesture); } }
取得したジェスチャー情報(swipreGesture)から、位置・向き・速度・状態などの
様々な情報を取得することができます。詳細は以下のリンクで
Downloads - Ultraleap
ここで、注意するべき事が1つあります。
LeapMotionから取得する情報の単位と、Unity上での単位が異なる場合があります。(座標など)
その為、Unityで扱えるように変換する必要があります。(ToUnity関数、ToUnityScaled関数)
Vector3 pos = swipeGesture.Position.ToUnity();
その他
DK2のカメラの近くにleapmotion置いて手を振ったりすると手で赤外線が反射してるのかポジトラが反応しちゃうな
— にゃるらと (@sakura_metal) 2014年8月5日
なん…だと…