Cross Road

Unity、VR、MR、ARを中心とした技術ブログ

LeapMotionとUnityでジェスチャー認識の練習

手と指のジェスチャ認識ができるLeapMotionというガジェットがあります。

Unity用のSDKも公開されており(要UnityProのはず)、これもまた可能性を感じますね。


ただ、LeapMotionを使った感じだと、ちょっとコードを書いた程度では認識精度が低かったです。

「Unity LeapMotion」などで検索しても「UnityとLeapMotionを連携した」という導入以上の情報が出てこないのはそのためかもしれません。

また、Ocufesで以前情報交換したときも、LeapMotionは利用が簡単ではないという意見がありました。

そのためか、最近のOculusクラスタの中ではLeapMotionは聞かなくなりました。

でも、私がPSMoveを使ったゲームの次に考えているものはLeapMotionの方が操作しやすいので、LeapMotionの採用を検討しています。

なので、やや注目度が落ち気味ですがLeapMotionも試してみました。


前提として、LeapMotionのdeveloper登録(無料)が完了し、LeapMotionがPCに接続されていることとします。

1. LeapMotionのSDKを入手

ここからWindows/Mac/LinuxのSDKのうち必要なものを入手します。

developer.leapmotion.com


ここではMac用を入手しました。展開すると、lib/UnityAssets/にPluginsフォルダがあります。これをUnityのプロジェクトにコピーします。

2. Unityプロジェクトを作成


Assetsに1のPluginsフォルダを丸ごとコピーします。

3. 適当なオブジェクト、およびスクリプトを作成

void objectOperationWithLeapMotion(){
		Frame frame = controller.Frame();
		fingerCount = frame.Fingers.Count;
		GestureList gestures = frame.Gestures();
		InteractionBox interactionBox = frame.InteractionBox;
			
			if(frame.Fingers[0].IsValid){
			  for(int n=0; n<gestures.Count; n++){	
				Gesture gesture =gestures[n];
				switch(gesture.Type){
				case Gesture.GestureType.TYPEKEYTAP:
					KeyTapGesture keytapGesture = new KeyTapGesture(gesture);
					Debug.Log("KeyTap");
				break;
				case Gesture.GestureType.TYPESCREENTAP:
					ScreenTapGesture screenTapGesture = new ScreenTapGesture(gesture);
					Debug.Log("ScreenTap");
					break;
				default:
					break;
			}
                     }


これをUpdate関数で呼ぶようにします。

4. スクリプトをオブジェクトにアタッチ

この後プロジェクトを起動し、LeapMotionの上で指をKeyTapまたはScreenTapのように動かすとDebugLogが出てきます。


f:id:Takyu:20131228113256p:plain
KeyTapの例

f:id:Takyu:20131228113303p:plain
ScreenTapの例

5. 動作確認

ただし、認識精度はあまりよくありません。うまく認識できないときは部屋を暗くするなどを試してみてください。

認識精度をよくするには、フレーム検知条件をもう少し緩くすることなどが考えられます。

参考にしたサイト


www.buildinsider.net