広告 レベル(マップ)関連テク

パーシスタントレベル(マップ)切り替え

Unreal Engine(UE)でマップ切り替えを実装してみよう!
マップ切り替えの方法はいくつかありますが、今回はパーシスタントレベル切り替えについて、初心者向けに解説します!

パーシスタントレベル切り替え例
完成イメージ

動作環境

当記事の動作環境は以下の通りです。
バージョンや環境によっては、正常に動作しない可能性があります。

ポイント

OS:Windows11 (Ver 22H2)

GPU:NVIDIA GeForce RTX 3060 Ti (Ver 3.27.0.112)

UE:UnrealEngine5 (Ver 5.3.0)

また、プロジェクトはサードパーソンプロジェクトの使用を前提とします。

同義語

UEに限らず3DCG系の解説では、用語が統一・定着しておらず、サイトや解説者によって異なる呼び方の場合があります。
初心者が混乱する一因になっており、解決されることを願うばかりです。

当記事でご紹介する内容は、UEにおいては「パーシスタントレベル切り替え」が多く使われる呼び方ですが、以下の内容も同じ意味を指すことがあります。

同義語

レベル切り替え、マップ切り替え、マップ遷移、画面遷移

UEにおけるレベルとは?

UEにおいてレベルとは、キャラクターや背景など、ゲーム・動画を構成する全ての物を配置する空間のことです。
簡潔に言えば、一般的なゲームでマップと呼ばれているものと捉えて良いです。

UEではレベルが2種類存在します。「パーシスタントレベル」と「サブレベル」です。
パーシスタントレベルは、常に必ず読み込まれているレベルで、一つしか開くことができません。
一方サブレベルは、パーシスタントレベルの中で複数存在でき、機能的には複数同時に開くことも可能です。

サブレベルを複数開くことは、明確な理由が無い限りデメリットの方が多いです

パーシスタントレベルを切り替えるメリットは、マップの雰囲気を大きく変えることができます。
反面、BGMやキャラクターのステータスなどを簡単に引き継げなかったり、マップ読み込み(UEではレベルのロードと呼ぶ)に時間がかかるなどデメリットもあります。

一方サブレベルは、パーシスタントレベルに比べ高速に切り替えでき、ステータス等も通常は引き継ぎ処理が不要です。
しかし、サブレベルはパーシスタントレベルのデータを使用するため、大きく雰囲気を変えることは難しい傾向にあります。

ポイント

通常はサブレベル切り替えを使用し、雰囲気を大きく変える場合はパーシスタントレベル切り替えを実施しよう!

まとめると、レベルのイメージとしては、スーパーマリオブラザーズのマップなどを思い浮かべると分かりやすいと思います。
パーシスタントレベルとして陸マップや海中マップがあり、その中にステージ1、ステージ2、…とサブレベルが存在すると考えてください。

UnrealEngineにおけるレベル(マップ)の例

また、広いマップをパーシスタントレベルで準備し、メモリ節約等の観点からマップをサブレベルで分割して管理する方法もあります。
しかし、UE5からは「World Partition」という機能が登場し、広いマップをサブレベルで分割管理する必要性は薄まりました。

レベル切り替え実装方法

マップ切り替えはいくつか方法がありますが、当記事ではパーシスタントレベル切り替えをご紹介します。

マップを作成

まずは切り替え前と切り替え後の2つのマップを作成します。

レベル選択ダイアログでBasicレベルを選択
レベル選択ダイアログ

レベルはどれでも構いませんが、初心者であればBasicレベルを選ぶと良いでしょう。

メニューから「ファイル」-「新規レベル」を選択します。
レベル選択ダイアログでBasicレベルを選択して作成します。

切り替え前のレベルと切り替え後のレベルが分かりやすいように、それぞれのレベルを変更します。
例えば、木や石などを配置したり、床のマテリアルを変更するなどしてください。

最後に保存します。
練習であれば、マップ1など分かりやすい名前で保存してください。
作品用であれば、何のレベルかを認識しやすい名称で保存すると良いでしょう。

切り替えのきっかけを作成

レベル切り替えが発生するきっかけを作ります。

トリガーボックスを設置した例
トリガーボックスを設置した例

いろいろと方法はありますが、当記事では応用が効きやすいトリガーボックスを使用して説明します。

トリガーボックスを使用すれば、トリガーボックスにキャラクターがぶつかった瞬間に次のマップに切り替えができます。

ドアなど切り替えたい対象付近にトリガーボックスを設置しましょう。

続いて、トリガーボックスのブループリントを編集します。

ブループリントでOpen Levelノードを接続する

「ActorBeginOverlap」ノードに、「Open Level」ノードを接続します。

「Open Level」ノードの”Level”に切り替えたいレベルを設定します。
(左図では”sublevel”に当たる部分)

「Open Level」ノードは2種類ありますが、(by Object Reference)を選択します。

これで完成です!

パーシスタントレベル切り替え例
完成イメージ

まとめ

要するに、ブループリントにて、マップを切り替えたいタイミングで「Open Level」ノードを接続すればパーシスタントレベル切り替えが実装できます。

ブループリントで実装できるため、トリガーボックスを使用する必要はありません。
例えば会話システムの選択肢に応じて遷移先のマップを切り替えたり、「はい/いいえ」ボタンを表示して切り替え前に確認したりすることも可能です。

動画で確認!

当記事の内容は、動画でも解説しています。
こちらも参考にしてください。

-レベル(マップ)関連テク