ゲームインスタンス、ゲームインスタンスサブシステムについて教えてください。
現在、ホーム画面となるレベルに「セッションを作る」などのUIを配置しており、そのUUserWidgetにセッション周りの処理を書いています。
ただ、レベルに移動すると該当UIが不要になるので、都度レベルのどこかにセッションの処理をするクラスを用意することになり、同じ記述を何度もすることになる予感がしてきました。
レベルを横断して存続するものに処理を持たせるのが良さそうですが、良い方法はありますでしょうか?
ゲームインスタンスサブシステムを使うのが良さそうとあったのですが、これはどういうものでしょうか?
また、このC++を作成するときファイル名の横にあるドロップダウンは何でしょうか?
ゲーム インスタンスは、ゲームが実行されている間に維持される単一のインスタンスで、異なるレベル間でデータを共有するのに適しています。
・C++では UGameInstance
クラスを継承して使用し、ブループリントでは "Game Instance" クラスを作成して使用します。
・データを保存する変数をゲーム インスタンス クラスに追加します。
・ゲーム インスタンスにアクセスするには、C++では UGameplayStatics::GetGameInstance
関数を使用するか、ブループリントでは Get Game Instance
ノードを使用します。
これらの方法のいずれかを選択して、データを他のレベルに渡し、維持することができます。
- 今回のような実装をしたいとき、ゲームインスタンスとゲームインスタンスサブシステムのどちらを使うべきでしょうか?またその違いは何でしょうか?
- スクショにも貼りましたが、C++作成時にファイル名の横にあるドロップダウンは何でしょうか?この「何か」に対してのみ有効なインスタンスでないのかと思っているのと、同一の「何か」に対して気軽に何個も作っていいものなのか気になっています。
>今回のような実装をしたいとき、ゲームインスタンスとゲームインスタンスサブシステムのどちらを使うべきでしょうか?またその違いは何でしょうか?
サブシステムについては以下の公式ドキュメントがご参考になると思います。
https://docs.unrealengine.com/5.3/ja/programming-subsystems-in-unreal-engine/
・UGameInstanceSubsystem
https://docs.unrealengine.com/5.3/en-US/API/Runtime/Engine/Subsystems/UGameInstanceSubsystem/
・UGameInstance
https://docs.unrealengine.com/5.2/en-US/API/Runtime/Engine/Engine/UGameInstance/
>スクショにも貼りましたが、C++作成時にファイル名の横にあるドロップダウンは何でしょうか?この「何か」に対してのみ有効なインスタンスでないのかと思っているのと、同一の「何か」に対して気軽に何個も作っていいものなのか気になっています。
「ランタイム」はプログラムが実行されている間の時間を意味し、ゲームエンジンでは「ランタイム」環境でのみ必要なコードやクラスを示すために「Runtime」という用語が使用されます。これらのクラスは主にゲームプレイに関連するロジックやオブジェクトを定義するために使用されます。
一方、「エディタ」に関連するクラスは、Unreal Engineエディタで使用されるツール、エディタの拡張、エディタでのUIなどを扱うコードを示すために、ファイル名に「Editor」という用語が使用されることがあります。