Back of the flyer

裏が真っ白なチラシがないので、ここに綴る

VR Spectator ScreenのUMG表示とVRPawnのリプレイ挙動について

本記事はUnreal Engine 4 (UE4) その3 Advent Calendar 2020 21日目の記事です。

UE4.26で作成。

はじめに

こんにちは。TARKと申します。

家業の配管屋を手伝いながら、トレーニンVRを作っています。素人の私がVRアプリを作成するうえで、UE4の公式ドキュメント、オンラインラーニング、SNS、書籍より学んだ情報を自己解釈混じりでお伝えしたいと思います。

 

主な内容

  • VR Spectator ScreenのUMG表示
  • VRでリプレイ実行するとき困ったこと 

宜しくお願いします。

 

VR Spectator Screen機能に操作可能なUMGを表示したい

VR Spectator Screen機能使っていますか?

なにそれ?という方は是非、おかずさんのブログを確認してみてください。

pafuhana1213.hatenablog.com

  

VR Spectator Screen機能は、HMD上の映像とは異なる映像をPCモニタに出力する機能です。

f:id:TARK146:20201218091754p:plain

 

VRHMD画面

f:id:TARK146:20201219145057p:plain


PCモニタ出力画面

f:id:TARK146:20201219145016p:plain

この機能を使っていると、図のようにPCモニタに専用のUMG表示したいとふつふつ感じるわけです。 しかし、PCモニタ上に表示されているものは、テクスチャです。

 

Inside UnrealでVictor Brodin氏は、

通常、テクスチャ上にUMGを表示する方法はないと述べており、

BlueprintでUMGを表示したい場合は、3DWidgetをカメラアタッチし、画面のマウス位置を取得する方法を提案しています。

1:06:30より~該当箇所

youtu.be

 

 

解決案 

いろいろ模索した結果、Unreal Engine Forumsに解決方法がありました。

目的に合致するものは「UnrealVrSpectatorControl」でした。

github.com

 

 UnrealVrSpectatorControl仕組み
(バーチャルリアリティテンプレートの場合)

f:id:TARK146:20201219182834p:plain

  1. レベルで、SceneCapture2Dより描画ターゲットを取得
  2. PawnにWidgetとWidgetInteractionを配置し、描画ターゲットを表示
  3. PawnのWidgetをTextureとしてSpectatorScreenに設定 f:id:TARK146:20201218104100p:plain

 そしてSpectatorScreen上のマウス位置情報を取得し、Widgetの位置に変換WidgetInteraction位置を設定しています。

 Calem Bendell氏の関数f:id:TARK146:20201218111143p:plain

詳しくは、氏のドキュメントを確認してください。

https://calben.github.io/UnrealVrSpectatorControl/#/

C++のコードを見たらそっとサイトを閉じる方。わかる。わかります。私も同じ。でも、一緒に勉強しましょう!あ、ちなみに、プラグインで配布もされているからC++分からなくても実装できました。
【2021/10/05】一部環境でコード作業が必要でしたので、記事を投稿しました。

tark146.hatenablog.com

f:id:TARK146:20201216125154p:plain

是非試してみてください。

 

新たな課題の発覚

HMD装着時の低FPSです。

再現性

ビルドもしくは、スタンドアローンでVRSpectatorScreenを実行。

HMDを外すとVRSpectatorScreenのFPSがガタ落ちする。PIEでは起きない。 

 

暫定対応

HMDを外した時、SpectatorScreenをオフにして、非VRPawnでUMGを表示

f:id:TARK146:20201219164031p:plain

もし、いい対処法があったらヒントをいただければ幸いです。
 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

VR体験をリプレイで確認したい

 課題

リプレイシステムの何がわからないかが、わからない。

リプレイ以前に学ぶべき仕組みを理解してない。

 

解決策

公式ドキュメントを熟読。

docs.unrealengine.com

 

マルチプレイヤーにセットアップされたプロジェクトは、リプレイ システムと互換性があるという点から、マルチプレイの仕組みを押さえていないと学習が進まないことに気づきました。

 

私はまったく分からなかったので、書籍やSlideShareYoutubeで学習。

UE4 ネットワークゲーム開発入門

www.shuwasystem.co.jp

www.slideshare.net

youtu.be

なんとなく理解ができたところで、C++を写経し、手を動かす。

youtu.be

 

そして、コンソールコマンドでリプレイできることにようやく気付く。

 

 過程や方法なぞどうでもよいのだーという人は、ThirdPersonテンプレートを作成し、ThirdPersonCharacterに下記を追加するだけで、リプレイが実行できます。

f:id:TARK146:20201218172750p:plain

 やったね!

 

 VRテンプレートにリプレイ実装時のエラー例

 同じ要領でVRテンプレートにReplayを実装した時につまずいた点を紹介

 

エラー①録画時に水色の箱を掴んでも、Replay時に反映されない

f:id:TARK146:20201218174908p:plain

原因

f:id:TARK146:20201218175023p:plain

 Replicate MovementとReplicatesにチェックを入れてなかった。

マルチプレイ同期には必須な項目でした。

 

エラー②VRPawnの動きがカクカクする。

これはなかなか情報源がなく、探すの苦労しました。

画面がカクカクする=choppy?

見つかりました!

 

原因

”demo.RecordHz”の値が低かった。デフォルト値=8

コンソールコマンドで60に変更  

 

 

最後に

まとまりのない記事となってしまいましたが、どこかの誰かに刺さる内容であれば幸いです。