UE4:簡単なOculus(VR)用のメインメニューの作り方
ちょっとスマートになる方
どうも僕です。
Oculusのコンテンツ制作の構想中、あれ?どうやってレベルを開けばいいんだろうか。どうやってゲームを終了させればいいのか考えました。
コントローラーを使わない体感系のコンテンツの場合、視線入力で決定する方法がベストなのでは。そう思い、VR用の簡単なメインメニュー(OpenLevelのみ)を作ってみました。
ということで、メモ程度ではありますが、作り方を書いていきたいと思います。
(注意:これはひとつの作成案であり、動作を保証するものではありません。)
VR用の簡単なメインメニューを作ってみよう!
今回の仕様
FPSテンプレートのみ使用
視線をバーに合わせると、バーのゲージが増えていく
Loading...が表示される←New!!
視線をバーから外すと、バーがのゲージが減っていく
OpenLevelが表示される←New!!
3秒視線を合わせ続けると指定したLevelに移行する
今回はゲージがマックスになると新しいレベル(ステージ)が表示されるようにします。
なので、[HelloWorld]と[HelloWorld2]というレベルを作成します。
次にWidgetを作成します。
作成→ユーザーインターフェース→Widgetブループリントを選択
名前を[VRMenu]にします。
Resolutionからカスタムを選択し、サイズを良い感じで変更します。
そしてProgressBarを設置し名前の最後にVRMenuと記入します。理由はわかりやすいからですね。
次にBluePrintを作成します。
作成→ブループリント→アクターを選択
名前をBP_VRMenuにします。
そして先ほど作った[VRMenu]を選択します。
サイズを変更しこんな感じに
次にMycharacterを変更していきます
グラフを開き、[イベントTick]と[Line Trace by Channel]出しつなげます。
次にStartとEndを設定します。
Get Player Camera ManagerのLocationをスタートに、その前方をGet Actor Foward Vectorを取りそっからどこまでを選択範囲にするかを指定します。今回はLocationから5000かけた方向までを選択範囲としLocationと足しあわせEndにつなげます。
現段階の動作を確認するため、DebugTypeを指定します。
そして実行すると以下のようになります。
イベントTickで動かしているため1フレームごとにあったところを赤い点と線で表示させています。
次にOutHitからBreakHit Resultを出しHitActorから先ほど作ったBP_VRMenuへキャストします。
Blean型の変数を作成します。
名前をLevelOpenにし、お目目アイコンをオンにします。
そしてLevelOpenをセットで設置し以下のようにつなげます。
(チェックを忘れないようにね!)
次にBP_VRMenuのグラフを開きます。
カスタムイベントを作成し名前を[OpenLevel]にします。
そして[Get Player Character]を設置しMyCharacterへキャストします。そしてAs My Characterから先ほど作ったLevel Openをゲットします。
イベントTickと[ブランチ(if的な奴)]を設置し先ほどのLevelOpenから線を引っ張ってきます。
これでBP_VRMenuを認識した際に動作を分岐させることが出来ます。
次にタイムラインを設置し以下のように接続します。
そして内部を3秒で値が1になるように線を引きます。
(fをクリックし、Shift+クリックで点の作成 詳しくはドキュメントを参考にしてください。)
次にFloat型の変数を作成します。名前を[Percent]にします。
そして、接続します。
次にWidgetのプログレスバーに数値を入れるBluePrintを作成します。
左側からWidgetをGetで持ってきます。そこから[Get User Widget Object]を出し、VRMenuにキャストします。
そしてVRMenuで設置したProgress Bar VRMenuをGetします。
Progress Bar VRMenuからSet Percentを出し、先ほど作ったFloat型のPercentをIn Percentに接続します。
次にMycharacterの方に戻り作成したカスタムイベント[OpenLevel]をつなげます。
すると、動き出します。
次はバーのゲージがマックスになった後にLevelを開く動作を作成します。
タイムラインのFinishedからブランチを引っ張り出し、変数Percentが1とEqualになった時に動作するようにします。
次に、ボックストリガーを以下のように設置します。
先ほどテストした際、この動作方法ではオブジェクトにのみ反応するようにしたので、何もないと動作が止まりません。例:床→バー:動き始める。 バー→空:動き続ける)
なので見えない箱でオブジェクトを判定させます。
そしてコリジョンをAllBlockにします。
すると、
あたっている時
増えてる
少し外した時
減っています。
次に、バーに記載するOpenLevelのテキスト表示についてです。
(記事の作成の都合上、スクショでは途中から表示されていますが、気にしないでください。)
BP_MenuのコンポーネントからTextRenderを設置します。
そして視線がバーに合わさった場合、Loading...が出るようにします。ロードしてませんが、何書いていいかわからなかったためLoadingにしました。
ブランチの後に以下のように設置します。
すると、
なります。
これで終了です。
だらだら書いてしまいましたが、BluePrintの全体像は
MyCharacter
BP_VRMenu
これ以外でバリバリ違うやり方ありそうなので、あったら教えて下さい!
あとこの方ですと、アクターとしてWidgetを表示してるのでVRの際に、自分の左下あたりにWidgetをすぽーんするスイッチ的な要素を持ったBPをデフォルトで表示させ、そっちに視線を合わせると、Widgetが目の前に出てくるってことも出来そうです。
わかりずらいですか?つまりこういうことです。
(決して適当に書いたわけではなく僕の力作なんです!!)
今度作ってみようかなと思います。
作り方、わかりづらかったら申し訳ないです。
これはひとつの作成例ですのでそれだけはお忘れなく。
以上
25日にVR冬祭り
僕も行くので息を潜めて参加者をニヤニヤ見てる予定なのでよろしくお願いいたします。
追記:Oculusでの動作確認済み