☆チームラボ☆にインターン行ってきた 八日目

本日はKinectのジェスチャー機能を使って、能動的に文字のメッシュ(を含めた空間全体)を回転させることを目標に作業しました。
というのも、やはり自動で回転すると思うように文字を書きづらいというのがあるためです。

具体的には、右手で文字を描画、左手で文字のメッシュを回転させるようにします。


僕が使っている、
Kinect v2 with MS-SDK(https://www.assetstore.unity3d.com/jp/#!/content/18708)
というアセットでは、デフォルトで

RaiseRightHand,
RaiseLeftHand,
Psi,
Tpose,
Stop,
Wave,
Click,
SwipeLeft,
SwipeRight,
SwipeUp,
SwipeDown,
RightHandCursor,
LeftHandCursor,
ZoomOut,
ZoomIn,
Wheel,
Jump,
Squat,
Push,
Pull

のジェスチャが判別できるようになっています。

モデルの回転ということで、最も相性が良いと思われるスワイプジェスチャを使ってみます。
上の表を見るとSwipeLeftと、SwipeRightが載っていますが、ジェスチャを定義しているKinectGestures.csスクリプトを見てみると、
SwipeLeftは右手での右方向から左方向へのスワイプ、SwipeRightは左手での左方向から右方向へのスワイプを判定するものとなっていました。

今回は左手のみで、両方向のスワイプを行いたいので、SwipeLeftの判定部分を書き換えます。
と言っても、右を左に置き換えるだけです。

ということで、左手による回転を実装できましたが・・・
スワイプの判定が安定せず、思うように動きませんでした。
(そういえば、もともとのデモでもうまく行ってませんでした)



切り替えて、次は左手を閉じている場合に、左手の移動量によって回転させる方法を実装することにしました。
手の開閉を判別する機能が存在しないようでしたので、これをまず実装しました。

手の構成要素として、このアセットには、
Hand, Thumb(親指), Hand Tip(指のうち親指以外をまとめたオブジェクト), Wristの4つのオブジェクトがあります。
今回は、HandとHand Tipの距離によって開閉を判定しています。

そして手が開いているときには、手の変位によって回転させることとします。

試すとこんな感じになります。


左手にバーチャルな文字が張り付いてみえますね。。。
現状の課題としては、スワイプ速度を一定にして、張り付いているように見えないようにすること、
右手も同じように開閉によって文字描画のオンオフ可能にすることですね

あとは少しエフェクトをつけてみたいですね。