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ファイルへのリンクを追加しました。