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

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

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


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

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

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

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

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

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

[補足]
PSMoveを使ったゲームについては、最近別件対応のためやや中断気味です。もし1月下旬以降にOcufesがあれば展示できるようにしたいと思っています。

LeapMotionのジェスチャ認識を確認した。

参考にしたサイト
http://www.buildinsider.net/small/leapmotionfirstimp/01

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

1. LeapMotionのSDKを入手
ここからWindows/Mac/LinuxSDKのうち必要なものを入手します。
 https://developer.leapmotion.com/downloads

ここではMac用を入手しました。

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

2. Unityプロジェクトを作成
Assetsに1のPluginsフォルダを丸ごとコピーします。

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

4. スクリプトに以下を記載

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関数で呼ぶようにします。

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


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

DebugLogが出てきます。


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

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


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

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


これを使いこなせれば、自分なりのマイノリティレポートごっこができそうですね(笑)

広告を非表示にする