茶ポーン

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

UE4 Leapmotionでもっと遊んでみた

マテリアル解説ありがてぇ…!ありがてぇ……!


この記事はUnreal Engine 4 (UE4) Advent Calendar 2014、4日目の記事になります。

Unreal Engine 4 (UE4) Advent Calendar 2014 - Qiita



指からビームを出したりして楽しんでたりしたのですが、
他にもUE4でLeapmotionで触ってみたことについて、書き残していきたいと思いますー。
よろしくです!


UE4でLeapmotionを使う

UE4でLeapmotionを使用するにあたって, 引き続きこちらのプラグインを利用しています。
Forum: [Plugin] Leap Motion - Event Driven
Git: getnamo/leap-ue4 · GitHub
Leap SDKの機能をほぼそのままブループリントで扱えるすごくナイスなプラグインです…!

Leapmotionのプラグイン導入・使い方に関してはこちらに書き残しているのでご参考にして下さいまし!

>>UE4でLeapmotionつかってみるついでに指からびーむだす(Leapmotion導入編) - toorsoo's diary

  • Leapmotionからの情報を扱いやすくまとめる

>>UE4でLeapmotionつかってみるついでに指からびーむだす(指から弾を出す編) - toorsoo's diary

  • 道具の追跡

>>UE4 Leapmotionで道具の情報取得 - toorsoo's diary





ジェスチャーでかるく遊んでみた

その1です!
ジェスチャーで遊んでみたまでの流れですー。
まずはジェスチャの情報取得方法から書いていきます!

Gesture情報取得

Leapmotionには4種類のジェスチャが用意されています。
CircleGesture — Leap Motion Java SDK v2.2 documentation
SwipeGesture — Leap Motion Java SDK v2.2 documentation
ScreenTapGesture — Leap Motion Java SDK v2.2 documentation
KeyTapGesture — Leap Motion Java SDK v2.2 documentation



これらをブループリントで扱うためのノードが用意されています。

Gestureの情報を取得するまでの流れ的には、

  1. 各Gestureの検出を有効にするノードを呼ぶ
  2. ジェスチャをするとジェスチャ毎に用意されたイベントが呼ばれる

こんな感じですが、ブループリントを見たほうがはやそうです!
f:id:toorsoo:20141203223131p:plain
上記グラフではGキーが押されたらCircleジェスチャーを有効にしています。
EnableGestureノードにLeapControllerコンポーネント、有効にするGESTURE_TYPEを指定します。
有効にしたジェスチャがCircleの場合は Event Circle Gesture Detected というイベントで拾う事ができます!

f:id:toorsoo:20141203224004p:plain
イベントノードからは各ジェスチャの情報を取得する事ができます。
Circleであれば円の中心座標、半径など、ジェスチャに関する情報が返ってきます。
どのような情報が取得できるかは上記のLeapmotionドキュメントに詳細がかかれていますー。



Gesture情報はこんな感じで取得可能!



…なのですがここで問題発生です((((;゚Д゚))))

自分の環境だけかもしれないのですが、ScreenTap, KeyTapは検出がうまくいかないようです。
プラグイン側なのかLeapSDK側の問題なのか, 正しい原因はよく掴めてないです…。


との助言頂いたので、確認してみると確かにトラッキングが低下すると…!
もしかしたら設定変えるだけで解決するかもしれないので、
詳細がわかれば追記しようかと思います/"_";


…トイウコトデ、とりあえず今回はCircleSwipeで遊びます!

描いた円の大きさに合わせて球を生成


f:id:toorsoo:20141203225836p:plain

Circleジェスチャのイベントは、有効な間呼ばれ続けるので、1つの球だけを生成したい時のトリガーとしては微妙な感じでした…!
なので、ジェスチャのIDに変化があった場合にのみ球を生成するようにしました。

Gesture情報から半径、中心座標を取得し、アクター生成用のTransformを作成。
アクター生成関数に適当にこしらえた球のアクターとTransformを渡して生成しています!
f:id:toorsoo:20141203230330p:plain
なんか魔法っぽい!!!!(小並感)

Swipe気円斬


f:id:toorsoo:20141203234219p:plain
Circleと同様、まずはSwipeジェスチャをEnableにする流れを作ります。(HキーでSwipe有効)
他は球をぺちゃんこに生成するなどで気円斬っぽく

触れただけで吹っ飛んでいくような処理をアクターにいれます。


そしてこんな感じに!

UE4Test1 - YouTube


という事でジェスチャの使い方と簡単な使用例でした!



OculsRiftでも遊んでみた

次はOculusRiftで遊んでみたことについてのメモです!
Leapmotionからの手の情報を、プレイヤーの位置・向き・視点に合わせた値の調整、
OculusRift DK2にマウントする際の設定を書き残しておきます。


プレイヤーの向き・座標に手の位置を調整

Leapmotionからの値を以下のようなマクロで加工します。
プレイヤーの向き、座標で変換をかけていますー。
f:id:toorsoo:20141204000123p:plain


現実とおさらばする設定


OculusRiftにマウントされた場合の設定を行えるノードが用意されています。
f:id:toorsoo:20141204000855p:plain
Optimize for HMD の Use Topdown にチェックを入れることで、
マウントされた状態のLeapmotionから正常に手の情報を取得する事ができるようになります!
ConstructionScript内などで呼んでおくといいかと思われます。

指ビームと組み合わせて……


UE4 + Leapmotion + OculusRift DK2 - YouTube
こんな感じになりました。

た、楽しい……

移動方法やビームのトリガーなどで課題はまだまだありますが、
ゲームっぽくしていけばさらに楽しそうです。


LeapmotionやOculusRiftを組み合わせれば妄想だった事が体験出来るように作れちゃうんですね!
UE4だとこれがプログラムコードを書かなくてもできちゃうという……やばい(確信)


以上、UE4, Leapmotionでもっと遊んでみた でした!


明日は@s_ssk13さんで、「リダイレクター」について語って頂けるそうです!
リダイレクター…一体どんな必殺技なんだ…!!(違