UE4 GameInstanceでグローバルに値を扱う
Game Instanceについて書きます。
今更解説もいらないシリーズ1です。
Game Instanceはレベルを跨いで値を保持するために使用するものです。
詳しい説明は
UE4 レベルを跨いで値を保持するGameInstanceについて - Let's Enjoy Unreal Engine
Game Instance, Custom Game Instance For Inter-Level Persistent Data Storage - Epic Wiki
に載っているのでそちらを参照してください。
ではやっていきます。
今回のUE4のバージョンは4.14.0です。
Game Instanceを作成する
プロジェクト作成後、Game Instanceのブループリントを作成します。
一番下にあるAll Classesに「Game Instance」と入力し、
Game Instanceを選択、Selectボタンを押します。
適当な名前を付けます。
Game Instanceを設定する
次に左上のEditからProject Settingsを開きます。
左側のProjectのMaps&Modesから
先ほど作成したGame Instanceを選択します。
これでGame Instanceを使用する準備ができました。
Game Instance内に処理を書いていく
作成したGame Instanceを開くと、このような感じだと思います。
グローバルに値を持ちたい変数や、
どこでも使いたい関数などを作成します。
今回は適当なBool型の変数と
Call Eventと文字を出力するCustom Eventを作成しました。
ではGame Instanceで作成した変数の値と関数を呼び出してみましょう。
レベルブループリントを開きます。
そしてこのように処理を組んでください。
Get Game Instanceは、先ほどProjectSettingsで設定した
Game InstanceがReturnされています。
その値でCastをし、扱いやすいように変数に格納しておきます。
その下にこんな処理を記述し、Pキーが押された際に
Game Instance内のGrobalFlagをTrueにし出力後、
Grobal Eventを呼び出します。
実行し、Pキーを押すと
GrobalFlagがTrueに変更後、出力。
GrobalEventによってCall Eventと出力されました。
Game Instance外のものをグローバルな変数に格納する
あらかじめ作成しておいたWidgetを戻り値に変数を
Game Instance内に作成します。
このままではまだ変数の中身は空なので、
Widgetブループリント内で自分自身をGame Instanceの変数に格納しましょう。
これでこのWidgetの値はGame Instanceを介すことで、
グローバルに扱えるようになりました。
今回はWidgetを使用しましたが、
何のコントローラーも持っていない、
おいてあるだけのObjectもグローバルに扱えると思います。
ただし、グローバルに扱えるということは
それなりのリスクがあるので注意して使用してください。