Loading
BLOG 開発者ブログ

2023年9月28日

【UE5】Unreal Engine 5でVRアプリ作ってみる4

UnrealEngine5

はじめに

こんにちは。
クラウドソリューショングループのyamasaki.sです。

【UE5】Unreal Engine 5でVRアプリ作ってみる
【UE5】Unreal Engine 5でVRアプリ作ってみる2
【UE5】Unreal Engine 5でVRアプリ作ってみる3

上記の簡単なアプリ作成をすることができたので、本記事ではAWSのEC2に専用サーバーを構築してマルチプレイができるように準備を行います。

目次

UE5プロジェクトのセットアップ

オンライン用のマップを追加

まず、デフォルトマップとして使用されているVRTemplateMapを複製してローカルマップとオンラインマップを区別できるようにします。
コンテンツドロワーから、VRTemplate > Maps フォルダに移動して、VRTemplateMapを右クリックし、「複製」します。

以下のように、複製した「VROfflineMap」をローカルマップ、「VRTemplateMap」をオンラインマップとして設定します。
こういった仕組みでローカルとオンラインでマップを切り替えることができます。

後にパッケージ化もするので、パッケージ化した際に複製したマップが含まれるように設定を入れておきます。

ウィジェットメニューに項目を追加

オンライン接続するためのメニュー項目を追加します。
コンテンツドロワーで VRTemplate > Blueprintsに移動し、WidgetMenu を開きます。

階層パネルで既存のボタンを選択して、ボタンを複製します。
ボタンの名前や表示名なども処理する内容に合わせて変更しておきます。

見た目の調整が終わったら、「On Clicked」のイベントを追加します。

クリックされた時の処理として、「Open Level」ノードを追加します。
Level Nameには後に構築するEC2 のパブリック IPv4 アドレスを入力するのですが、今は仮で設定しておきます。

ユーザーを見えるようにする

ユーザーがサーバーに接続できるようになりましたが、接続したユーザーはお互いには見えない状態です。
そのため、ヘッドマウントディスプレイとコントローラーを複製し、それぞれトランスフォームを追跡できるようにします。
コンテンツドロワーで VRTemplate > Blueprints に移動し、VRPawnを開きます。

LHandTransform、RHandTransform、HeadTransformという変数を作成します。

変数の詳細はそれぞれ、以下のように設定します。

作成した変数を更新するためのカスタムイベントを作成します。

続いて、ユーザーのヘッドマウントディスプレイとコントローラーのトラッキング位置を更新するためのカスタムイベントを作成します。
「Is Locally controlled」でローカルかリモートかの分岐を行います。
trueの場合、ローカルユーザーとして変数の値を更新します。

falseの場合、リモートユーザーとして変数の値を元にヘッドマウントディスプレイとコントローラーを表示します。

最後に、毎フレームごとに処理される「EventTick」からトラッキング位置を更新するためのカスタムイベントを呼び出します。

AWSのセットアップ

続いて、Unreal Engine サーバーを実行する EC2 インスタンスを構築します。
Amazon Machine Image (AMI)は、「Amazon Linux 2 AMI(HVM)」を選択します。

インスタンスタイプは、「c5.xlarge」を選択します。

セキュリティグループには、
SSH アクセスと Unreal Engine 専用サーバー (デフォルトはUDP経由のポート 7777) を許可するようにインバウンドセキュリティグループのルールを変更します。

ストレージの設定は、100 GB 以上を指定します。

最後に、インスタンスの詳細タブで「パブリック IPv4 アドレス」を確認し、仮で指定していたウィジェットメニューの「Level Name」を変更します。
追加料金が発生しないようにEC2インスタンスは停止、終了させておきましょう。

さいごに

Meta Quest 3はもう直ぐ発売ですね!
Apple Vision Proも2024年後半に発売されるようですし、XR機器が一般的に普及し出すのも遠い未来ではなさそうですね!
Unreal EngineやUnityもVision OSに対応するようですし、楽しみです!

次回は、サーバーをパッケージ化してEC2にアップロードし実際にマルチプレイできた状態を記事にしたいと思います。

yamasakiのブログ