はじめに
この記事はUnreal Engine 4 (UE4) Advent Calendar 2016の9日目の記事です。
qiita.com
OculusTouch発売、おめでとうございますー!
twitterを見てみると、無事に着弾している方が沢山もいて何よりです!
ということで、
これからUE4とOculusTouchを使ったVRコンテンツを作成する方向けにサンプルプロジェクトを作成・公開しました!
github.com
このサンプルプロジェクトを使って頂くことで、
「物を掴む・離す」「掴んだ物を使う」「状態に応じた手の表示」などの
OculusTouchを使ったVRコンテンツで必要となる要素を
実装する手間を省くことができます。
製品レベルのクオリティを実現するためには要改造ですが、
プロトタイプ製作・ゲームジャムでの使用レベルなら、耐えられるかと思います。
…たぶん、きっと、おそらく、いや、まあ、じこせきにん、てきな…うふふ…
今後もサンプルなどの要素を増やしていきたいと思うので、
是非使用した感想・要望・不具合報告・クレームなどを送って頂ければと思います。
中身の細かい解説は後日するとして…
ざっくりと要素・使い方の説明をしたいと思います。
(いや、サボりとかではなくて…別の記事がね?…ゴニョゴニョ…)
方針
今回公開したこのプロジェクトですが、
以前公開したViveコン向けのサンプルプロジェクトのリベンジ
という意味合いを持っていたりします。
pafuhana1213.hatenablog.com
↑で以下の内容が問題になっていました
- とにかく複雑過ぎる
- 新規で掴まれるオブジェクトを作るのが手間だった
- 専用のBPを継承したBPを新たに作って…専用の処理を書いて…
- などなど
ということで、今回のプロジェクトでは以下の内容の実現を目標としました
- 掴み対象BPはコンポーネントを追加 + 専用イベントに処理を登録するだけ
- 簡単に新規の掴み対象BPを作れるように。また既存のBPへの捕まれ対応を容易に
- 掴み対象BPを実装する方がなるべく制約を意識しない形に
- 可能な限りシンプルな構成に
- OculusTouchの操作に全対応
- 各入力イベントに対して処理を登録可能
- 各入力情報に応じた手モデルの表示
できました! たぶん…
掴み対象BP側の実装について
掴む側の実装については…長くなりそうなので後ほど別の記事に書きます…
掴み対象のBPで肝になるのは、専用コンポーネントである「BPC_GrabTarget」です。
基本的にはこのコンポーネントを掴み対象BPに追加して、
「掴まれた(Grabed)」「離された「Released」」イベントディスパッチャーに
対応するイベントを実装・登録するだけで対応完了です。ね、簡単でしょ?
掴まれ、離され以外にも、「使う」「掴まれた状態でボタン入力された」などの
動作に関係するイベントを用意しています。
また、BPC_GrabTargetからアクセスできるBP_MotionControllerからは
OculusTouchの各入力情報(OculusTouchInputData)が取れます。
(スティックの傾き情報や、サムズアップなど)
これらの機能・情報を使うことで「持ったものに対して何らかの操作を行う」ことが
簡単に実現することができます。…たぶん
掴む側、つまり手に当たるBPでは以下の処理を行っています。
- Overlapした相手がBPC_GrabTargetを持っているか?
- 持っている相手なら各イベントをBPC_GrabTargetにリクエスト
この辺りの処理は余程特殊な処理をしない限りは変わらないと思うので、
BPC_GrabTargetの各イベントディスパッチャーに登録する処理の実装に専念する形になります。
掴み対象のBPは幾つかサンプルを用意しています。まずはその中身を眺めていたければ、
どんな感じで処理を組めば良いのかが分かるかと思います。
"Content\StartOculusTouch\Blueprints\GrabSample"