ぼっちプログラマのメモ

UE4とかVRとかについて書いたり書かなかったり。

LeapMotion V2Betaを使ってみました(実行ファイル付き)

デバイス倉庫から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内の表示モデルと物理モデルを設定してください
f:id:pafuhana1213:20140805222311j:plain
表示モデルと物理モデルは、Prefabs下のHandGraphicsHandPhysicsにあります。
それぞれ数パターン用意されています。
f:id:pafuhana1213:20140805222900j:plain

設定後に実行すると、トラッキングに応じて手のCGモデルが表示されると思います

ジェスチャーの使い方(スワイプ)

LeapMotionでは検出可能なジェスチャーが幾つか用意されています。
今回は、その中のスワイプを使用しました。
(その他のジェスチャーについては、以下のリンクを参照して下さい)
API Overview — Leap Motion C# and Unity SDK v2.0 Beta documentation

ジェスチャーの検出有効化

まず、検出したいジェスチャーの検出フラグを有効にする必要があります。
スワイプの場合は、以下のコードで有効にすることができます。

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)から、位置・向き・速度・状態などの
様々な情報を取得することができます。詳細は以下のリンクで
SwipeGesture — Leap Motion C# and Unity SDK v2.0 Beta documentation


ここで、注意するべき事が1つあります。
LeapMotionから取得する情報の単位と、Unity上での単位が異なる場合があります。(座標など)
その為、Unityで扱えるように変換する必要があります。(ToUnity関数、ToUnityScaled関数)

Vector3 pos = swipeGesture.Position.ToUnity();

その他


なん…だと…