茶ポーン

ゲーム作りめも。VR幻想郷いきたい。

UE4 Leapmotionで道具の情報取得

わりと苦戦してしまった…
というかLeapmotionの設定で道具の追跡にチェックが入ってなくて3-4時間格闘してしまった……


ということでいろいろメモっておこうかと思います。





今回もこちらのLeapmotionプラグインを使わせて貰ってます。感謝……!
[Plugin] Leap Motion - Event Driven



棒きれの認識ですが、Leapmotionの道具関連は「Tool」という名前で用意されているようです。
Tool — Leap Motion Java SDK v2.2 documentation

「棒状のようなもの」から「わりと棒状のようなもの」まで認識してくれる様子。スゴイ。


診断ビジュアライザーでテスト
f:id:toorsoo:20141123014333p:plain






UE4のプラグインで取得できるのは、
位置
長さ
大きさ

なようなので、それぞれの値をまず取得してみますー。




Toolの値の取得手順は、

  1. LeapControllerコンポーネント経由でPointableを取得
  2. Pointableの GetIsToolノードで取得したPointableが「Toolの値」かどうかを判別
  3. 判別結果が True であればPointableの値をToolとみなして使用する


な感じになりました。


Githubにあるプラグインのをソースを解読してみたところ、
Toolの取得には現状この方法しかない様子でありました。


Pointableについて
最初に取得する「Pointable」というのは、Finger、Tool情報の派生元クラスで、
位置情報、長さ、大きさ、向きなど、汎用的な情報が取得できるクラスのようです。
f:id:toorsoo:20141123025446p:plain





では実際その値取得を行っていきます!



Pointable取得

LeapControllerコンポーネント経由で取得します。
こちらのLeapControllerの設定については導入の際に追加したものです。
詳細はこちらを参考にしてみてください!
UE4でLeapmotionつかってみるついでに指からびーむだす(Leapmotion導入編) - toorsoo's diary


f:id:toorsoo:20141123020446p:plain
①GetFrame ノード
このフレームデータは現在の更新時間、「FPS」でいわれるフレームと同じ意味のようです。
ノードには過去のフレームデータを取得できる引数が用意されていますが、
今回は現在のフレームデータを使いたいので「0」を入れておきます!

②Pointables ノード
フレーム内で取得できたPointableのリストを取得します。

③ループでPointablesにある全てのPointableにアクセス
PointablesのGetCountノードで取得した数分、ループさせます。

④GetPointableById ノード


これでPointableにアクセスする事ができました。



次に取得したPointableからToolで使用する情報を取得してみます。

Tool情報取得

f:id:toorsoo:20141123023117p:plain
①GetIsTool ノード
Toolかどうかを判別! Toolなら処理させます。
書いてて気づいたんですが、イベントディスパッチャーでPointable情報を専用イベントに投げれば、
もう少しノードがまとまりそうです…!

②StabilizedTipPositionノード
棒の先端の位置情報です!

③棒の逆側の端の座標です。
向きと長さを②で取得した座標に足して算出しています。
向き:Direction ノード
長さ:Length ノード

④Widthノード
棒の太さです。


上のノードではそれぞれ取得した位置にデバッグ用の表示をしています。

こんな感じに表示されます!

f:id:toorsoo:20141123024527p:plain