如何开发UE4 plugin模拟Unity 3D双viewpoints同步功能
回答
完全可以通过UE4纯编辑器插件实现和Unity一致的scene/game视口双向实时同步效果,不需要修改引擎源码,实现难度很低。
核心实现逻辑
UE4原生不同步的本质原因是:编辑器状态下的scene视口渲染的是编辑器世界(Editor World),而game视口默认渲染的是PIE(Play In Editor,编辑器内运行)模式下生成的独立游戏世界(PIE World),两个世界默认数据隔离,没有做变更同步通道。只要打通两个世界的对象映射和数据同步链路就能实现需求,具体可以拆成三步做:
- 首先建立双世界对象映射:PIE启动时引擎会自动为编辑器世界的每个Actor生成PIE世界的运行时副本,你可以直接通过
UEditorEngine::GetPlayWorld()拿到运行中的PIE世界实例,通过Actor自带的PIE实例标记、或者对象路径匹配规则,快速建立编辑器源Actor和PIE运行时副本的一一对应关系,不需要自己做对象拷贝逻辑。 - 然后实现双向变更同步:
- 正向同步(Scene操作同步到Game):注册编辑器提供的对象属性变更、Actor移动/增删的全局委托(比如
FEditorDelegates::OnObjectPropertyChanged、GEditor->OnLevelActorMoved),只要检测到编辑器侧对象的Transform、属性、存在状态变化,就找到对应的PIE副本同步对应值即可,注意同步时跳过编辑器专属对象、避免触发PIE侧的多余回调。 - 反向同步(Game操作同步到Scene):给所有PIE侧的映射对象绑定属性变更、Transform变更监听,只要检测到运行时对象被操作(比如模拟模式下拖拽物体、运行时逻辑修改了对象属性),就把变更值反向写回编辑器侧的源Actor,这里一定要加状态锁,避免两边回调互相触发导致死循环。
- 正向同步(Scene操作同步到Game):注册编辑器提供的对象属性变更、Actor移动/增删的全局委托(比如
- 最后补全视口交互体验:如果要做到和Unity完全一致的操作感,可以额外加视口选中同步、相机参数同步逻辑——比如在Scene视口选中对象时,Game视口自动高亮对应运行时副本;在Game视口点选对象时,编辑器自动选中对应的源Actor;需要的话也可以把两个视口的相机位置、FOV等参数做实时同步,这些参数都可以从
FEditorViewportClient和PIE玩家相机组件直接拿到,没有访问限制。
注意避坑
- PIE支持同进程运行、独立进程运行两种模式,独立进程模式下两个世界不在同一个进程空间,需要通过UE自带的跨进程通信接口传递同步数据,初期开发可以先只支持同进程PIE模式,覆盖90%以上的使用场景。
- 反向同步编辑器对象时,不要触发编辑器的脏标记(也就是未保存提示),不然只是在Game视口拖了下物体就弹关卡保存提示,体验会非常差。
- 记得过滤运行时临时生成的、没有对应编辑器源对象的Actor,这类对象不需要做反向同步。
这类插件的开发量并不大,熟悉UE编辑器扩展接口的话,1-2天就能做出可用的基础版本。
内容的提问来源于stack exchange,提问作者reinhart
相关产品推荐
相关产品推荐

