UE4 Leapmotionでもっと遊んでみた
マテリアル解説ありがてぇ…!ありがてぇ……!
この記事はUnreal Engine 4 (UE4) Advent Calendar 2014、4日目の記事になります。
Unreal Engine 4 (UE4) Advent Calendar 2014 - Qiita
指からビームを出したりして楽しんでたりしたのですが、
他にもUE4でLeapmotionで触ってみたことについて、書き残していきたいと思いますー。
よろしくです!
目次!
■ UE4でLeapmotionを使う(UE4でLeapmotionを使うにはのおさらい)
■ ジェスチャーで遊ぶ!
・ジェスチャー情報取得
・描いた円の大きさに合わせて球を生成
・スワイプ気円斬
■オキュラスリフトで遊ぶ!
・プレイヤーの向き・座標に手の位置を調整
・つらい現実とおさらばする設定
UE4でLeapmotionを使う
UE4でLeapmotionを使用するにあたって, 引き続きこちらのプラグインを利用しています。
Forum: [Plugin] Leap Motion - Event Driven
Git: getnamo/leap-ue4 · GitHub
Leap SDKの機能をほぼそのままブループリントで扱えるすごくナイスなプラグインです…!
Leapmotionのプラグイン導入・使い方に関してはこちらに書き残しているのでご参考にして下さいまし!
- プラグイン導入 / 情報取得
- Leapmotionからの情報を扱いやすくまとめる
- 道具の追跡
ジェスチャーでかるく遊んでみた
その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の情報を取得するまでの流れ的には、
- 各Gestureの検出を有効にするノードを呼ぶ
- ジェスチャをするとジェスチャ毎に用意されたイベントが呼ばれる
こんな感じですが、ブループリントを見たほうがはやそうです!
上記グラフではGキーが押されたらCircleジェスチャーを有効にしています。
EnableGestureノードにLeapControllerコンポーネント、有効にするGESTURE_TYPEを指定します。
有効にしたジェスチャがCircleの場合は Event Circle Gesture Detected というイベントで拾う事ができます!
イベントノードからは各ジェスチャの情報を取得する事ができます。
Circleであれば円の中心座標、半径など、ジェスチャに関する情報が返ってきます。
どのような情報が取得できるかは上記のLeapmotionドキュメントに詳細がかかれていますー。
Gesture情報はこんな感じで取得可能!
…なのですがここで問題発生です((((;゚Д゚))))
自分の環境だけかもしれないのですが、ScreenTap, KeyTapは検出がうまくいかないようです。
プラグイン側なのかLeapSDK側の問題なのか, 正しい原因はよく掴めてないです…。
@toorsoo VRだとジェスチャ系は認識しにくいってKnown Issueあったような
— 野生の男 (@yasei_no_otoko) 2014, 11月 30
との助言頂いたので、確認してみると確かにトラッキングが低下すると…!
もしかしたら設定変えるだけで解決するかもしれないので、
詳細がわかれば追記しようかと思います/"_";
…トイウコトデ、とりあえず今回はCircleとSwipeで遊びます!
描いた円の大きさに合わせて球を生成
Circleジェスチャのイベントは、有効な間呼ばれ続けるので、1つの球だけを生成したい時のトリガーとしては微妙な感じでした…!
なので、ジェスチャのIDに変化があった場合にのみ球を生成するようにしました。
Gesture情報から半径、中心座標を取得し、アクター生成用のTransformを作成。
アクター生成関数に適当にこしらえた球のアクターとTransformを渡して生成しています!
なんか魔法っぽい!!!!(小並感)
Swipe気円斬
Circleと同様、まずはSwipeジェスチャをEnableにする流れを作ります。(HキーでSwipe有効)
他は球をぺちゃんこに生成するなどで気円斬っぽく
触れただけで吹っ飛んでいくような処理をアクターにいれます。
そしてこんな感じに!
UE4Test1 - YouTube
という事でジェスチャの使い方と簡単な使用例でした!
OculsRiftでも遊んでみた
次はOculusRiftで遊んでみたことについてのメモです!
Leapmotionからの手の情報を、プレイヤーの位置・向き・視点に合わせた値の調整、
OculusRift DK2にマウントする際の設定を書き残しておきます。
プレイヤーの向き・座標に手の位置を調整
Leapmotionからの値を以下のようなマクロで加工します。
プレイヤーの向き、座標で変換をかけていますー。
現実とおさらばする設定
OculusRiftにマウントされた場合の設定を行えるノードが用意されています。
Optimize for HMD の Use Topdown にチェックを入れることで、
マウントされた状態のLeapmotionから正常に手の情報を取得する事ができるようになります!
ConstructionScript内などで呼んでおくといいかと思われます。
指ビームと組み合わせて……
UE4 + Leapmotion + OculusRift DK2 - YouTube
こんな感じになりました。
た、楽しい……
移動方法やビームのトリガーなどで課題はまだまだありますが、
ゲームっぽくしていけばさらに楽しそうです。
LeapmotionやOculusRiftを組み合わせれば妄想だった事が体験出来るように作れちゃうんですね!
UE4だとこれがプログラムコードを書かなくてもできちゃうという……やばい(確信)
以上、UE4, Leapmotionでもっと遊んでみた でした!
明日は@s_ssk13さんで、「リダイレクター」について語って頂けるそうです!
リダイレクター…一体どんな必殺技なんだ…!!(違