Game Instanceを使ってレベルが変わってもデータを保存できるようにする方法
Game Instanceとは
Game Instanceクラスを使えば、レベルを切り替えても、値を簡易的に保存して値の参照をすることができます。
まず、Blueprint上でGame Instanceを使って値の書き込み・読み取りをする例をみていきます。
Game Instanceを親にしたBlueprintクラスを作成する
コンテンツブラウザ内を右クリック → ブループリントクラス
を選択して、検索ウィンドウにGame Instanceと入力して、Game Instanceを親クラスに設定し
Blueprintを作成します。
ここでは、MyGameInstanceというクラス名にします。
できたクラスをダブルクリックして、編集画面に入ります。
左部に表示されるマイブループリントの変数のプラスアイコンをクリックして、
レベル間においても保存したい変数を追加します。
ここでは、LifeというIntegerの変数を定義しました。
また、外部アクセスできるように、目のアイコンをクリックして、publicにします。
オリジナルのGame Instanceクラスを参照できるようにする
続いて、MyGameInstanceクラスを認識させるための設定をします。
上部メニューから設定 → プロジェクトの設定を選択します。
するとプロジェクト設定ウィンドウが表示されるので、Game Instance Classに
先ほど作成したMyGameInstanceクラスをセットします。
Blueprint上でGame Instanceにアクセスする
続いて、作成したGame InstanceにBlueprint上からアクセスしたいと思います。
Blueprint上で右クリック→検索欄にGameInstanceと入力し、
GameInstanceノードを出現させます。
MyGameInstanceを参照するために、GameInstanceを作成したMyGameInstanceにキャストします。
GameInstanceには、返り値として、GameInstanceオブジェクトを返すので、
そこから、先ほど定義したLifeにアクセスすることができます。
Blueprint図は以下のようになり、ここでは、MyGameInstanceに定義したLifeをdecrementしています。
この値はLevelが変わっても保存されます。
参考ソース
公式のGameInstanceに関するドキュメント、c++でのアクセス方法が書いてあります。
UnrealEngine4.19で確認しています。