UE4初心者が頑張ってるブログ

Unreal Engine4を使用した開発メモ、及びそれに関連することについて不定期に書いています。

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ボタンを押します。

f:id:MozPaca:20161121172258p:plain

 

適当な名前を付けます。

f:id:MozPaca:20161121172514p:plain

 

Game Instanceを設定する

次に左上のEditからProject Settingsを開きます。

f:id:MozPaca:20161121172559p:plain

 

左側のProjectのMaps&Modesから

先ほど作成したGame Instanceを選択します。

f:id:MozPaca:20161121172827p:plain

これでGame Instanceを使用する準備ができました。

 

Game Instance内に処理を書いていく

作成したGame Instanceを開くと、このような感じだと思います。

f:id:MozPaca:20161121173804p:plain

 

グローバルに値を持ちたい変数や、

どこでも使いたい関数などを作成します。

 

今回は適当なBool型の変数と

Call Eventと文字を出力するCustom Eventを作成しました。

f:id:MozPaca:20161121174038p:plain

 

ではGame Instanceで作成した変数の値と関数を呼び出してみましょう。

レベルブループリントを開きます。

 

そしてこのように処理を組んでください。

Get Game Instanceは、先ほどProjectSettingsで設定した

Game InstanceがReturnされています。

その値でCastをし、扱いやすいように変数に格納しておきます。

f:id:MozPaca:20161121180320p:plain

 

その下にこんな処理を記述し、Pキーが押された際に

Game Instance内のGrobalFlagをTrueにし出力後、

Grobal Eventを呼び出します。

f:id:MozPaca:20161121180605p:plain

 

実行し、Pキーを押すと

f:id:MozPaca:20161121180746p:plain

GrobalFlagがTrueに変更後、出力。

GrobalEventによってCall Eventと出力されました。

 

Game Instance外のものをグローバルな変数に格納する

あらかじめ作成しておいたWidgetを戻り値に変数を

Game Instance内に作成します。

f:id:MozPaca:20161121180905p:plain

 

このままではまだ変数の中身は空なので、

Widgetブループリント内で自分自身をGame Instanceの変数に格納しましょう。

f:id:MozPaca:20161121181219p:plain

これでこのWidgetの値はGame Instanceを介すことで、

グローバルに扱えるようになりました。

 

今回はWidgetを使用しましたが、

何のコントローラーも持っていない、

おいてあるだけのObjectもグローバルに扱えると思います。

 

ただし、グローバルに扱えるということは

それなりのリスクがあるので注意して使用してください。