関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2017.11.17UE4UE/ C++
UE4でゲームを作成するときレベルを跨いでデータを扱うなどといった場合,GameInstance(※1)というクラスを使用するかと思います。
今回はこのGameInstanceを使用せずに永続的なオブジェクトを作成する方法をご紹介いたします。
まずは永続的なオブジェクトとなるクラスをUObject継承で作成します。作成するものはブループリント定義でもC++定義でも構いません。
今回はSingletonObjectというクラス名でC++定義で作成してみました。
次に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