Blueprrint間のデータのやり取りについて - mishimatsu/UE4 GitHub Wiki

Blueprint間で、データをやりとりについて

Level Blueprintとデータのやりとりするには、どうしたらいいかという質問などを目にすることがあります。 なんのために、Level Blueprintとデータのやり取りをしたいのか? どうすればデータのやり取りを行えるのか?

という、疑問に答えていきたいと思います。

現在、自分が作っているS.C.E.(Working Title)では、どのようにデータの管理及びデータのやり取りを行っているかを説明したいと主ます。 これは、自分がやっているやりかたであり、他にもやりかたはあります。 自分が作りたいゲームの規模にあったものを選択するよいでしょう。 現在、作成しているS.C.E.について、簡単に説明します。

ゲームの内容は、時間内に、設定されたゴールを目指すというものです。 ステージ内には、ボーナスアイテムがあり、取ると得点になります。 そのステージで、より多くの得点を稼ぐ方法を発見していくことがこのゲームの醍醐味になります。 このゲームには、得点、残り時間を管理する必要があり、このデータ例にしてをどのように管理しているかを説明したいと思います。

Blueprintの相関図 相関図SVGファイル

概略図ですが、これがこのゲームで行っている各Blueprintの相関図になります。 ゲーム中のデータは、すべてGameStateに集約されます。 レベルをまたぐデータのやりとには、GameInstanceを介して行っています。

Q.得点、残り時間は、どこで管理しているのか? A.GameStateを継承したmyGameStateというBlueprintで管理しています。 myGameStateの作り方 コンテンツブラウザから右クリックで、ブループリントを選択。 親クラスにGameStateを選択します。 作成したBlueprintに、管理したいデータを変数を追加します。 点数を管理するScore、残り時間を管理するTimeなどを追加してます。 メニューのブループリントのプロップをクリックするとBlueprintの詳細を確認することができます。 親クラスがGameStateになっていることが確認できると思います。

Q.作成したmyGameStateのBlueprintと別のBlueprintからデータをやりとりするにはどうすればいいのか? A.GetGameStateで、GameStateを取得することができます。 このGameStateは、myGameStateになります。 変数にアクセスするためには、Castが必要になります。 myGameStateへCastに成功すると、myGameStateのBlueprintへアクセすることが可能です。 この例では、Castに成功したら得点を加算するという処理を行っています。 myGameStateから現在のスコアを取得して、HUDに表示しています。 BeginPlayで、myGameStateを変数に設定しています。 これは、HUDの更新のたびにGameStateを取得して、Castする手間を軽減しているためです。

Q.myGameStateのCastに失敗するんだけど? A.ワールド設定で、GameStateからmyGameStateへ変更していないのが原因だと思います。 ワールド設定を確認して、作成したmyGameStateへ変更してください。

Q.なぜ、Level Blueprintで管理しないのですか? A.ステージが複数ある場合には、Level Blueprintで管理することが難しくなります。 これは、同様の処理をステージの数だけ作成することになるためです。 ステージの共通の処理に関しては、myGameStateに記述しておくことで、Level Blueprintは、初期設定などのステージ特有の処理だけを記述するだけですみます。

Q.Levelをまたぐ際のデータの受け渡しは、どうするのか? A.GameInstanceを継承したmyGameInstanceで行います。 GameInstanceは、アプリケーションが終了するまで、データを保持しておくことが可能です。 Get Game Instance

Q.ハイスコアなどのアプリケーションが終了してもデータを保持しておきたいデータのセーブは、どうするのか? A.Save Game to Slotを使って、データをファイルへセーブすることができます。 データのロードセーブを行うためには、SaveGameを作成する必要があります。 Create Save Game Objectで、SaveGameを作成することができます。 ロードには、Load Game from Slotを使います。 Save Game to Slot Create Save Game Object Load Game from Slot 更新履歴 2015/03/06 Blueprintの相関図を更新しました。 Blueprint相関図のSVGファイルへのリンクを追加しました。