使用UE5默认关卡创建PCG,使用Spawn Actor节点,如图:
[Image Removed]
<br/>
使用运行时生成
[Image Removed]在PCGWorld上设置Treat Editor Viewport as Generation Source。这样可以让编辑器的Viewport作为PCG的StreamingSource,方便编辑器下预览。
[Image Removed]
这样在Editor下,就可以预览Runtime生成的Actor,如上图。这时,运行PIE,发现又生成了一遍,Editor下的Actor被带入了PIE。
[Image Removed]
<br/>
跟了一下代码:
[Image Removed]
如果是PCG的preview Actor,会标记RF_NonPIEDuplicateTransient,
[Image Removed]
但是启动PIE的时候,依然被带入了PIEWorld,这个地图确实不是WP地图,所以上面是false,具体如上图。就会导致场景里有两个Actor,感觉可能是引擎BUG。
<br/>
这个会导致PCG在非WP地图下完全不可用。不知道这种情况要怎样修改比较合适。
也测试了5.7,Bug依然存在
[Attachment Removed]
RoryXY
(Xiao Yue)
3
您好,
抱歉回复晚了, 遗漏了这个问题.
有RF_Transient, RF_NonPIEDuplicateTransient这两个标记, Actor在PIE时会复制一份, 但不会存到关卡中, shipping版本应该不会有问题.
我不确定是设计如此还是bug, 会再咨询下开发同学. 看适不适合把 RF_NonPIEDuplicateTransient 改成 RF_DuplicateTransient, 确保不会复制到PIE中.
开发同学修复了这个问题, 只改这个标记不太合适, 具体可参考 主分支的这个提交 CL 49624314
[Attachment Removed]
感谢回复,我们可以先尝试在源码引擎上这样修改
由于我们主分支还在使用Epic预编译的引擎,想问问不知道是否有不修改引擎的补救措施?
[Attachment Removed]
RoryXY
(Xiao Yue)
5
不改源码好像没有什么好方法, 我能想到的只有在你spawn的蓝图Actor的construction script上判断一下是editor还是runtime spawn的, 然后在Begin Play中根据这个判断destroy掉editor的actor.
[Image Removed]开发同学那边如果有其他方案或者代码修复我也会再反馈到这里.
[Attachment Removed]
RoryXY
(Xiao Yue)
6
开发同学修复了这个问题, 主分支 CL 49624314
后面会合入5.8
[Attachment Removed]