レベルインスタンス読み込み時にブロッキングロードの原因となっているActorの情報をログ出力するには?

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

UE5.8環境にて、ULevelStreamingDynamic::LoadLevelInstance() によりレベルインスタンスをロードした際、内部で FlushAsyncLoading() が呼び出され、同期ロードによる処理ブロックが発生しています。

<br/>

過去にUE5.7のときに問い合わせた際、IsSpatiallyLoaded == false の Actor が関係していおり、該当するものをデータレイヤーに逃がすかフラグをtrueにするかで回避可能と回答をいただきました。

<br/>

今回UE5.8への移行に伴い、原因となるActorの情報をログ出力をするようなエンジン改造の対応を進めたいと考えております。

そこで、FlushAsyncLoading() (最終的には FAsyncLoadingThread2::FlushLoading(TConstArrayView&lt;int32&gt; RequestIDs)) の実行に至る原因となっている IsSpatiallyLoaded == false の Actor を特定したいのですが、UE5.8ではエンジンソースのどの箇所にログを追加するのが適切でしょうか。

調査したい内容は以下の通りです。

  • FlushAsyncLoading() が発生する際の呼び出し経路
  • Always Loaded Cell として扱われているセルの情報
  • そのセルに含まれる IsSpatiallyLoaded == false の Actor 一覧
  • 最終的に同期ロードを引き起こしている Actor 名やクラス名

<br/>

<br/>

※UE5.7時点では World Partition のセル生成処理における以下の判定が関連している認識です。

<br/>

<br/>

// UWorldPartitionRuntimeHashSet::GenerateStreaming内部
const bool bIsCellAlwaysLoaded =
 !CellDescInstance.bIsSpatiallyLoaded &&
 !CellDescInstance.DataLayerInstances.Num() &&
 !CellDescInstance.ContentBundleID.IsValid();



[Attachment Removed]

UWorldPartitionLevelStreamingDynamic::RequestLevel(%ls) is flushing async loadingのログ出力の前後で GetChildPackages() でパッケージ配列を取得してパッケージ名を出力、ハッシュ名になっているのでStreamingGenerationログに出力されているパスと突き合わせるようにするのが単純だと思います。

ただしこのブロッキング動作は、PIEやスタンドアローンで起動したゲームで起こることであり、クック済みアセットを読み込むパッケージビルドでは動作が替わることにご注意ください。

クック済みのレベルではAlwaysLoadedのセルは レベルのパッケージ内に移動します。

つまりレベルのリクエストを行ってレベルパッケージがLoadedになった段階でロードが完了しています。そのためAlwaysLoadedセルの読み込み処理でのブロッキング動作は起きません。

[Attachment Removed]

ありがとうございます。

教えていただいた方法をためしてみます。

クック済みのものでは、起きないのですね有益な情報助かります。

本件クローズでお願いします

[Attachment Removed]