【環境】
- Windows 11
- UE 5.5.4 ランチャー版
<br/>
お世話になっております。
<br/>
下記、不具合と思われる現象はEditor時の話です。
<br/>
- WPマップにおいて、DataLayerAssetsを「設定しているアクタ」を仮にアクタA、「設定していないアクタ」をアクタBとします。アクタBをアクタAにアタッチ(BをAの子にする)して、DataLayersパネルからそのDataLayerをUnloadにすると、子アクタであるアクタBが表示されてしまいます。
<br/>
この現象を再現できるミニマムプロジェクトを添付いたしますので、ご確認いただけますでしょうか。
<br/>
ここで期待する挙動としては、以下になります。
- DataLayerをUnloadにすると、子アクタであるアクタBが表示されなくなり(Unload状態になる)、ナビメッシュにも影響を与えない。
<br/>
以下、質問になります。
- アクタBが表示されるのは想定された挙動でしょうか?
- アクタBにアクタAと同じDataLayerAssetを設定しておけば期待する挙動になりますが、そのように子アクタにも明示的に親と同じ設定をしておくべきでしょうか?
- そもそも、子アクタにDataLayerAssetを設定していない場合は、子アクタは内部的に親アクタと同じ設定になり、空間ロード的にも1つにまとめられるのでしょうか?
<br/>
ご教示よろしくお願いします。
<br/>
再現手順
【再現プロジェクト説明】
- TestDataLayerAssets.uproject(ランチャー版: 5.5.4)を立ち上げてください。
- Content/TestWPMap.umapを開いてください。これはWorldPartitionマップです。
[Image Removed]
【マップ構成】
- BP_Plane(赤)とBP_Cube(青)を置いています。
- ↑画像のアウトライナのように、BP_CubeはBP_PlaneにAttachされています。
- BP_Planeには↓画像のように、DataLayerAssetsを設定しています。(DL_Test)
[Image Removed]
- 一方、BP_Cubeのほうには、DataLayerAssetsは設定していません。
[Image Removed]
- DataLayerは、BP_Planeに設定している「DL_Test」のみです。
[Image Removed]
- マップ全域を囲うようにNavMeshBoundsVolumeを置いています。
【不具合再現手順】
1.
WprldPartitonパネルで、全域をLoadしてください。
[Image Removed]
2.
DataLayersパネルでは、「DL_Test」をLoad状態にしてください。
[Image Removed]
3.
すると、↓画像ようにBP_PlaneとBP_Cubeが表示された状態となる想定です。
[Image Removed]
4.
DataLayersパネルで、「DL_Test」をUnload状態にしてください。
[Image Removed]
5. 不具合?
すると、↓画像ようにBP_Cubeだけが表示された状態となります。BP_PlaneはViewportに表示されていませんが、OutlinerではLoadされているような状態になっています。
[Image Removed]
6.
ここで、BuildPathsでナビメッシュを更新すると、↓画像ようにBP_Cubeがナビメッシュに影響を与えます。
[Image Removed]
【期待する挙動】
4~6.で、「DL_Test」をUnload状態にしたときにBP_Cubeは非表示(Unload状態)になり、ナビメッシュにも影響を与えない。
【補足】
- BP_CubeにBP_Planeと同じDataLayerAssetsである「DL_Test」を設定しておけば、期待する挙動になりました。
- BP_Cube下のCubeコンポーネントのCan Ever Affect Navigationをオフにしても、BP_Cubeはナビメッシュに影響を与えてしまいます。
再現プロジェクトのご用意ありがとうございます。問題を確認することができましたので
UE-294749 Editor vs Runtime: Inconsistent data layer behavior when attaching actors としてバグ登録いたしました。数営業日ののちにバグトラッカーに公開されます。
DataLayerはエディタではアクター毎に判定を行い、ランタイムではアクタークラスター毎に判定を行うため動作に差異が発生します。
大変お手数ですが、同じ動作を再現するために階層構造を用いるアクター群には手動で同じデータレイヤーを登録していただくのがワークアラウンドとなります。
> そもそも、子アクタにDataLayerAssetを設定していない場合は、子アクタは内部的に親アクタと同じ設定になり、空間ロード的にも1つにまとめられるのでしょうか?
ワールドパーティションでのセルの割り当ての際に関係のあるアクターでアクタークラスター構造を形成して親の扱いに同期します。
ご確認とご回答ありがとうございます。
バグトラッカーへのご登録ありがとうございます。
また、ワークアラウンドの手法についても承知しました。