ご回答ありがとうございます。返信にお時間を頂いてしまい申し訳ございません。
頂いたコールスタックなどの情報を元に、追加調査を行いました。
まず、今回問題になっている状態の説明の為にレベル構成について改めて記載致します。
・LevelInstanceActor_A(親階層)
・LevelInstanceActor\_B(子階層)
・バインドされないActor(孫階層)
上記が、現状のレベル構成となります。
以下の文では、上記の名称を利用させていただきます。
今回問題になっている箇所では、WorldPartitionを利用しており、バインドされないActorもLevelInstance以下に存在しておりますが、こちらでCellのロード制御などは行っておらず、常に全てのロードを行う状態にしている認識です。
ここでいう常に全てロードを行う状態というのは、セルサイズをほぼ最大化して、ロード範囲も同等のサイズにしており、さらに、LevelInstanceActor_Aの「Is Spatially Loaded」をfalseとしている状態です。
バインドされないActorとLevelInstanceActor_Bの「Is Spatially Loaded」はtrueとなっております。
念のため、バインドされないActorの「Is Spatially Loaded」をfalseとしてみたのですが、問題は解決されませんでした。
これらを踏まえて、スタックトレースを確認したところ、失敗しているケースでは、UWorldPartitionLevelStreamingPolicy::GetSubObjectの
if (const FName* CellName = FindCellNameForSubObject(SrcPath, /*bInResolveContainers=*/true, OutSubObjectString, OutLevelMountPointContext, OutCellOuter))
でtrueにならず、そこから先に進まずに失敗しており、成功例では正しくこの先に入っており、StaticFindObjectに成功していました。
そこで、FindCellNameForSubObjectの中身を確認したところ、失敗ケースではSubObjectsToCellRemappingの中身に、今回バインドを行いたいActorが登録されていないことがわかりました。
改めて成功例を見ると、SubObjectsToCellRemappingの中身にバインドを行いたいActorが登録されております。
なお、上記の実験時に参照解決を行おうとしていたObjectのUAIDは成功時、失敗時を問わず同一の文字列が利用されていることを確認済みです。
そこで実験として、バインド解決ができていないActorをInitialRuntimeStateがActivatedになっているDataLayerに登録したところ、パッケージのSubObjectsToCellRemappingの中身に登録され、バインドの解決が行われる状態を確認しました。
しかし、このActorには元々DataLayerが登録されておらず、このActorが配置されているLevelInstanceActorに設定されているDataLayerは、今回問題が発生しているWorldPartitionのレベル、LevelInstanceActorに登録されているレベルのどちらにも登録されていない(インスタンス化されていない)ものです。
その為、このレベルでは該当のActorのON/OFFは発生せず、DataLayerには本来登録の必要が無いものであるという認識です。
ここで改めて3点、質問させてください。
- DataLayerに登録することでSubObjectsToCellRemappingに登録されたのは何故でしょうか?
- バインド解決を行う場合は、SubObjectsToCellRemappingに登録されることが必要なのでしょうか?
- もし必要なのであれば、SubObjectsToCellRemappingに登録する為には、どのようなことを行えばよいでしょうか?今回はDataLayerに登録するというフローを行いましたが、他の方法があればご教授いただければ幸いです。
参考資料として、登録したDataLayerと、WorldSettingsの画像を添付いたします。
不足情報がありましたら、改めて添付いたします。
よろしくお願いします。
[Attachment Removed]