DataLayerの状態の取得について

お世話になっております。

WorldPartitionにあるDataLayer機能を使用し、ゲームの進行の応じてアクターをアクティベートしたり、ディアクティベートしたり

制御したいと思っています。

DataLayerの状態について不明点があるので質問いたします。

① データレイヤーをアクティベートした後、そのデータレイヤーに結び付いているアクターたちを取得して、まとめて表示、または非表示化したいですが、

何かの良い方法はないでしょうか。ULevel で Actors 配列に格納されているのは把握しておりますが、それで制御して良いものでしょうか。

② データレイヤーの Activated 完了判定は UWorldPartitionSubsystem::IsStreamingCompleted 関数を使用することで間違いでしょうか。

弊社の他のプログラマーから正しく判定がとれていないという報告があり、代わりにデータレイヤーの状態を取得できる疑似アクターを実装しました。

それをデータレイヤーと結び付けて、データレイヤーを Loaded、または Activated する時、アクターの PostLoad や BeginPlay でマネージャーに通知しています。

もし他の方法があれば、教えて頂けませんでしょうか。

③ DataLayerAsset を DataLayerInstanceName に変換する方法は、UDataLayerManager::GetDataLayerInstanceFromAsset を使用するしかないでしょうか。

ForEachDataLayerInstance ループで探すより、直接 DataLayerAsset から DataLayerInstanceName を取得することが望ましいですが、方法はありますでしょうか。

以上です。よろしくお願いします。​

お世話になっております。

① DataLayer に含まれるアクターを一括で有効化/無効化する場合は UDataLayerManager::SetDataLayerRuntimeState 等とするのが手軽です。

[Image Removed]こちらで不足である場合は各 Actor への参照を通して表示/非表示などの制御を行うことも問題ありません。

② UWorldPartitionSubsystem::IsStreamingCompleted が他のスレッドでも案内されている手段ではありますが、現在のところ期待する結果を返さない状態にあるようです。

https://issues.unrealengine.com/issue/UE-259478

正式な対応に関しては未定ですので、既にワークアラウンドを実装されているのであればそちらをお使いいただくくらいかと思います。

③ アセットから DataLayerInstanceName を導出することは難しいです。

ご指摘の通り UDataLayerManager::GetDataLayerInstanceFromAsset を用いるのが適切かと思います。

よろしくお願いいたします。