
Team xRのホルヘです。
今回はUnreal EngineのAR機能を試したいのでゲームのプロトタイプを作ることにしました。
バージョンはUnreal Engine5.3を使い、Androidで動作させます。

目標
家具などが検出された場所に建物が出現するAR空間を作り、同時に怪獣も出現させます。怪獣は移動しながら建物を破壊し始めます。怪獣が全ての建物を破壊する前に、怪獣を倒すことを目的としたARゲームを作りたいと思います。
このプロジェクトは以下のステップで実装を進めました。
- カメラでスキャンして、家具を区別する
- 家具の場所へ建物を出現させる
- 移動しながら建物を倒している怪獣を出現させる
- 怪獣を倒すアクションを追加

ARジオメトリ
まず空間をスキャンして床以外の場所を区別します。
Epic Gamesが提供するARサンプルをチェックすると、スキャンされた空間内で生成されるオブジェクトであるARジオメトリを取得する方法がわかります。これらのジオメトリをARプレーンに変換し、私たちが持っているすべてのプレーンをタグで区別し床であるものを見つけます。最後にスキャンを停止し、床以外のプレーンを床の高さと同じ高さに移動させます。これで建物は家具の上にではなく、床の高さに表示され家具に重なったように表示できるようになるはずです。


PCG (プロシージャル コンテンツ生成フレームワーク )
次に床以外の場所にランダムで建物を表示します。
Unreal Engine 5には、Epic Gamesチームによって作成された新しいプラグインがあります。これにより、表面内にランダムなポイントを作成するグラフを作成できます。生成方法に調整を加え、グラフにさまざまなモデルを与えると、ポイントにモデルを出現させることができます。
通常、これはエディターモードで使用されるツールです。スキャンが完了した後に建物を生成したいので、ランタイム中に機能するように調整して実装しました。


Unreal EngineのAI
建物を破壊する怪獣の動作モデルを作成します。
Unreal Engine 5でAIを扱うことは、「Behavior Tree」と呼ばれる機能のおかげで非常に簡単です。私たちはAIがどのようなアクションを取るかを選択するためのいくつかのシンプルな条件を設定し、ロジックを追加することができます。
今回は、シンプルなものを作成しています。「建物を探してそこに向かう」です。また、怪獣が建物ではなくランダムなポイントに移動する確率も追加しています。

ミサイル発射!
最後に怪獣を倒すアクションを実装します。
一番簡単でシンプルな方法で実装しました。
画面をタップしたら、カメラが向いている方向へミサイルを撃ちます。

▲怪獣のモデルがありませんでしたので、Unreal EngineのQuinnが建物を破壊することになりました。

まとめ
この開発を行う主な理由は、Unreal Engine 5でARアプリケーションを作成する際の手順を確認することでした。
UEのAR機能は少し不足しているようで、公式フォーラムをチェックしても、未解決の質問がたくさんあり、ARで何かを作りたい場合、現状はUnityの方が開発スピードと動作安定性は高そうです。ですが、UE 5にはPCGやAI動作ツリーのような非常に優れたツールがあるので、利用シーンによってはUEを使う選択肢も見えてきました。

システムフレンドはXRの技術を利用し、楽しい「体験」を実現するための開発を行っています。ご相談や事例の紹介など弊社のエンジニアがフレンドリーに対応させていただきます。 お気軽にお問い合わせください。