2つのLevel間でデータをやり取りする3つの方法

UnrealEngineにより、2つのLevel間でデータをやり取りするための方法を3つ紹介いたします。

OpenLevelのOption文字列を用いる方法

OpenLevelのOption文字列の値は遷移先のLevelで取り出すことができます。OpenLevelのOptionsに渡した文字列は、GetGameModeのOptionStringに入っており、そのまま取り出してもよいですが、ParseOptionを用いて取り出すことにより、キーとの組み合わせの値を?で区切って複数簡単に取り出すことが可能となります。

以下がこの方法でLevel間で、文字列をやり取りするサンプルです。

GameInstanceを用いる方法

ブループリントクラスの全てのクラスの中にGameInstanceのクラスがあります。このクラスはゲームが実行されている限り常に存在しつづけている、いわゆるシングルトンともいわれるようなブループリントです。このブループリントに値を保持させておくことによって、どのLevelからでも値を取り出すことができます。

また、現在のプロジェクトにおいて、どのゲームインスタンスを用いるかどうかは、プロジェクト設定のマップ&モードの一番下から設定できます。

遷移前のLevelのレベルブループリントのイベントグラフは以下のようになっております。GetGameInstanceでゲームインスタンスを取得し、インターフェースを用意していない場合、それを新しく作ったゲームインスタンスにキャストして、そこから値をセットできます。

遷移後のLevelのレベルブループリントのイベントグラフは以下のようになります。

サブレベルを用いる方法

UE4のレベルには、パーシスタントレベルとサブレベルがあります。開くことができるパーシスタントレベルは一つだけですが、パーシスタントレベル上で複数のサブレベルを開くことができます。サブレベルを用いる方法では、パーシスタントレベル上のサブレベル間で情報をやり取りする方法を記します。まずウィンドウからレベルにチェックが入っているかを確認しておきましょう。レベルウィンドウでは以下のようにパーシスタントレベルの中に複数のレベルを入れることができます。このウィンドウからレベルの追加やレベルの新規作成が可能です。

今回はサブレベルの操作などに関しては触れませんので、ブループリント上で、値の受け渡し方法だけを綴ります。黄色く囲んであるゲームコントローラーのマークからレベルブループリントが開けるので開いてみましょう。

2つのサブレベルにインターフェースを追加したいので、ブループリントインターフェースを作成しましょう。そして、その作成したブループリントインターフェースは、2つのサブレベルに追加しましょう。

以下のイベントグラフのように接続しましょう。やっていることは、パーシスタントレベルで設定した値を、一つ目のサブレベルをかいして、2つめのサブレベルに渡しそこでPrintStringするという何の意味もない処理です。GetStreamingLevelというノードを介してインターフェースを利用できるということだけ知っておけばよいと思います。

終わりに

最後の方法に関しては、難しいですし例えばタイトル画面からほかの場面に移行するのに使うというよりは、すごい広いフィールドのオープンワールド的なゲームにおいて、必要な時に必要なマップのにロードするのに使ったり、RPGの一定時間ごとのエンカウントなど頻繁に場面を切り替える場合に使うのが良いと思います。小規模なゲームの場合、Option文字列を使う方法で十分に対応可能だと思います。以上で筆者が知っている限りのレベル間のデータのやり取りの方法についての解説を終わります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA