The bug of WPRuntimeCellTransformerISM for actors which can not be transformed fully

使用 WPRuntimeCellTransformerISM 合批场景静态物体,

发现对于无法完全转换的​Actor,在PIE时,原始Actor也仍会出现在场景里,

并且其中本应该被Remove的Component也仍然存在(WorldOutliner中选中Actor可以看到),

并没有被Remove,像是下图 RemoveOwnedComponent() 和 MarkAsGarbage() 没生效。

[Image Removed]

但可以合并的 Component 是有被合并到 WorldPartitionAutoInstanceActor 中的​。

同时其中EditorOnly(无法被 WPRuntimeCellTransformerISM 合并)的​Component,也出现在PIE的场景中,详见下图。

​ [Image Removed]

​WPRuntimeCellTransformerISM 是个很实用的功能,请求修复这个bug~

你好,WPRuntimeCellTransformerISM会遍历里面所有StaticMeshComp,对于非EditorOnly和Mobility为Static且Visible才会合并的哦,所以您蓝图中的四个StaticMeshComp其中有一个是Movable,另一个是EditorOnly的,因此没有被合并,只有剩下的两个被合并了~

这个知道,这是特意调整的测试用例,目前问题是这两个:

1、原模型上被合并的Comp,按理应该是从原始Actor上Remove掉了,但PIE时仍在场景中显示了。

2、没被合并的EditorOnly Comp,按理PIE时不会显示,但也显示了。

我有看过TransformerISM的代码,对这功能理解是:

对于存在部分Comp无法转换的Actor,

能转换的Comp 数据会被合并到 WorldPartitionAutoInstanceActor 中,原始Actor中的Comp会被移除,

对于不能转换的 Comp,会被保留在原始Actor中,原始Actor也仍然会在场景中存在,但仅包含不能转换的Comp。

这个理解没错吧?

谢谢反馈,您的理解是对的,这个bug之前有收集到,目前正在处理预计5.8修复。Unreal Engine Issues and Bug Tracker (UE\-350090,)

我看了一下原因,虽然WPRuntimeCellTransformerISM中将这个actor中BlueprintCreatedComponents里的组件移除了,但LevelStreaming::UpdateStreamingState会走一遍Level::IncrementalUpdateComponents重新把之前的组件在Actor::PostCreateBlueprintComponent里加了进来,后面的修复需要考虑一下CellTransformer的引入去除了不必要的组件,在Actor::CreateComponentFromTemplate构造流程时去掉已经删除的SCS

好的,我们打算先临时修改,跳过无法完全转换的Actor,能完全转换的Actor应该没问题吧?

我测了下能完全转换的actor倒是没有残留,您要不先避免使用bp中包含部分comp能转这种情况来处理一下~

好的,感谢解答。