BLOGブログ

2017.11.17UE4UE/ C++

[UE4]GameInstance以外で永続的なオブジェクトを扱う

UE4でゲームを作成するときレベルを跨いでデータを扱うなどといった場合,GameInstance(※1)というクラスを使用するかと思います。

今回はこのGameInstanceを使用せずに永続的なオブジェクトを作成する方法をご紹介いたします。

 

手順1:クラスを作成

まずは永続的なオブジェクトとなるクラスをUObject継承で作成します。作成するものはブループリント定義でもC++定義でも構いません。

今回はSingletonObjectというクラス名でC++定義で作成してみました。

 

手順2:プロジェクト設定から作成したクラスを指定する

次にProjectSettings(プロジェクト設定)/GeneralSettings(基本設定)/DefaultClasses/GameSingletonClass/

で先程生成したクラスを指定します。

以上で終わりです。

これだけで指定されたクラスがGameInstanceと同じように永続的なオブジェクトとして扱うことができます。

これだけであればGameInstanceと何も変わらないように思いますが明確に違う点があり、GameInstanceはRunTime中(ゲーム実行中)に生成されるのに対してGameSingletonClassで指定したクラスは

エディター起動中に生成され存在することができます。(※2)

なのでRunTime中にあった変更をそのままゲーム終了後も引き継ぐようなことができたりします。

先程作成したSingletonObjectにFTickableGameObjectを継承させれば


エディター起動中でも定期更新するオブジェクトを作成できますし
もちろんこれを継承したブループリントクラスを作成してもブループリントでもTickを扱うことができます。

先程作成したUSingletonObjectを継承したブループリントクラス作成し[GameSingletonClass]に設定しなおします

TickをOverrideしてPrintStringを呼ぶと…

実行してない状態でも[Hello]が呼ばれるように
使い方によっては面白いことができそうですね!

最後まで読んでいただきありがとうございました。

 

※1 ゲームインスタンスについて

 

※2 生成してるコード箇所

Engine Version 4.17で

Engine\Source\Runtime\Engine\Private\UnrealEngine.cpp

の1795