サクッとOculusジェットコースターをつくろう! その3 ~ オープンソースなUE4Rollercoasterのレベルブループリントを読む。 UnrealEngine43分クッキング #UE4Study

 スクリーンショット_011315_012026_AM

サクッとOculusジェットコースターをつくろう!3回目はチュートリアル動画のバージョンが古くてその通りには使えなかったRollercoasterPlugin4.4.1の使い方について調べていきます。

OculusVRのフォーラムにあるRollercoasterPluginのトピックをよく読むと、RollercoasterPluginの開発者の方が自身のOculusジェットコースターの定番アプリ、UE4Rollercoasterのプロジェクト一式を公開されているので、こちらをダウンロードしてUE4で作る際の実装の肝であるレベルブループリントから使い方を読み取っていきます。
(その1でやるべきであった記事の内容。まず先に関連するフォーラムは全部読もう。こうならないように)

前回

サクッとOculusジェットコースターをつくろう! その2 ~ ブループリント続編  UnrealEngine43分クッキング
http://2vr.jp/2015/01/12/ue4-de-oculus-rollercoaster-2/

前回は簡単なコースを作成、走らせるところまで行いました。

環境

  • Unreal Engine 4.4.3
  • RollercoasterPlugin 4.4.1

UE4Rollercoasterのプロジェクト一式

https://forums.oculus.com/viewtopic.php?f=42&t=8032&start=240#p198843

こちらからUE4RollercoasterProject.zipをダウンロード。UE4.4.3で開く。

※前回まで参考にしていたチュートリアル動画はRollercoasterPlugin の旧バージョンを解説したもので4.4.1からいくつか変更点があります。
・再生時に自動的に移動を開始しなくなった。
→RollercoasterPlayerControllerクラスブループリントのPlayerControllerのStoppedをfalse、Climbingをtrueへ変更する必要あり。
・加速はPlayer ControllerのAdd Rollercoaster VelocityからAdd Velocityに変更された。

UE4Rollercoasterのプロジェクトを紐解く

まずはロジックの肝であるレベルブループリントのグラフを見てみます。

無題クリップ_011215_102136_PM

UE4Rollercoasterのレベルブループリントを確認

一通り見てみると次のような感じ
ちなみに開始のイベント(赤いノードのブロック)は、キーイベントとレベル内に配置されたColiderとの衝突判定がトリガー

スクリーンショット_011215_111809_PM

変数初期化

  • ゲームモードで指定されたPlayerControllerとPawnを変数RollercoasterPlayerControllerとRollercoasterPawnに格納

EnterかゲームパッドAボタンでスタート~

  • コースターを動かすにはRollercoasterPlayerControllerクラスブループリントのPlayerControllerのStoppedをfalse、Climbingをtrueへ切り替える必要がある。
  • コースターの停止はRollercoasterPlayerControllerクラスブループリントのPlayerControllerのStoppedをfalse(但し十分減速しておくこと。急に止めると酔う)

コースターの加速

  • コースターの加速はAdd Velocityで。減速はAdd Velocityにマイナスを指定

コースターの走る音

  • RollercoasterPawnクラスブループリントの上昇StartClimbing関数と下降StartFalling関数
  • 音を止めるにはRollercoasterPawnクラスブループリントのFadeTrackSound関数

風切り音

  • 任意の位置で音を鳴らしている

Oculusのヘッドトラッキング軸をコースのレールに沿って左右に傾けるかどうか

  • コースターが横になったときにOculusのヘッドトラッキングも連動するようにするにはRollercoasterPlayerControllerクラスブループリントのBlueprint Camera RollをON
    (ただし完全に横になった時にやっているのは、数十度傾いたときにヘッドトラッキングの軸を傾けると酔ってしまうため。よく考えられているが、boolean値でON/OFFではなくどれくらい影響受けるかのほうが酔いの対策としてはいい)

コースの上り下りのレールに沿ってカメラを上下傾けるかどうか(Cキーで切り替え

  • Camera PitchのON/OFF
    下り、真下落ちるときにレールに沿ってカメラも傾けるかどうか。
    ONでカメラをレールに沿って傾けて真下の地面を向く。OFFだと前向いたまま

カメラやヘッドトラッキング軸のRoll、Pitchの回転を制御するための関数が用意されており、酔いの対策についてもよく考えて作られていて感動。

他にコースターの動きに関係するもの

摩擦係数や重力加速度の指定についてはRollercoasterPlayerControllerにあります。
UE4Rollercoasterでは、RollercoasterPlayerControllerのGravity Accelerationをデフォルトから変更してUE4RollercoasterPlayerControllerクラスブループリントを作成。
これをゲームモードに指定しているようです。

スクリーンショット_011315_124226_AM

 

 

その他

再生時に「LIGHTING NEEDS TO BE REBUILT」と言われてビルドしたら「パフォーマンスの警告 Importanceボリュームが無くシーンが大きすぎるため、自動合成されたボリュームは良い結果にはなりません。シーンの品質とライティングビルド時間を最適化するために、隙間なくバウンディングしたライトマスのImportanceボリュームを追加してください。」といわれたときの対処法

スクリーンショット_011315_125021_AM

 

再生時に件のメッセージが出たため、ライティングのみビルド(Ctrl+Shift+;)を行ったところ次のようなメッセージが表示された。

無題クリップ_011315_125222_AM

 

ライトマスのImportance ボリューム?と見ていたらモードパネルのボリュームの中にある、間接ライティングの計算範囲を指定する「Lightmass Importance Volume」をレベルに配置して、レールの範囲を全部囲ってあげればよさそう。

無題クリップ_011315_125454_AM

 

UE4背景アーティスト勉強会(後編) 実演+解説
http://www.slideshare.net/aikoshinohara/ue4-42872266

 

UE4エディタの便利な操作

ブループリントのグラフエリア→レベルのビューポート

レベルに配置したトリガー(TriggerVolume)に表示を切り替えれる。
このトリガーどこに置いたっけな?が解決

無題クリップ_011315_122510_AM

 

シーンアウトライナー→ブループリントのグラフエリア

超便利。レベルにある謎のコライダーがどんな役目なのか一発でわかる。

無題クリップ_011315_123346_AM

次回へ続く

次はいよいよ、0からコースを作ってみます。

サクッとOculusジェットコースターをつくろう! その4 ~ コースをつくってみる。 UnrealEngine43分クッキング
http://2vr.jp/2015/01/15/ue4-de-oculus-rollercoaster-4/