先看效果

背景
在我们的项目开发中,我遇到了一个非常常见的痛点:在 Cocos Creator 编辑器中修改 Prefab 时,每次都需要重新预览才能看到效果。
这不仅打断了开发流程,也会导致场景运行状态丢失,例如滑动列表回到顶部、输入框内容被清空。长此以往,开发效率大幅降低。
我希望能够像 Vite 热更新那样,实现 在 Cocos 中无需刷新浏览器即可动态更新资源。
Cocos Creator 默认行为
- 修改 Prefab 后,浏览器或预览场景会自动刷新
- 刷新后,运行状态丢失,调试体验不佳
我的需求
- Prefab 修改后立即生效,无需刷新场景
- 保留用户操作状态(滑动列表、输入框内容等)
- 支持 SpriteFrame、Texture、嵌套 Prefab 等资源动态更新
实现方案
代理编辑器
- 使用 Electron 代理 Cocos Creator 编辑器的预览服务
- 客户端请求资源时,动态注入 热更新脚本,无需修改项目原有代码
- 利用编辑器的 Socket 服务监听资源变化,及时通知客户端进行更新
这样,我们可以在运行时捕获 Prefab 的修改事件,而不依赖刷新场景。也不会入侵项目,可随时关闭。
客户端热重载
- 监听 Socket 发送的 Prefab 修改消息
- 跳过缓存,强制获取最新 Prefab 资源
-
递归 Patch 节点和组件字段:
- 使用diff算法,只更新变化字段,避免重复渲染和性能开销
- 复用旧节点实例,保证用户操作状态不丢失
已实现场景
- 节点属性
- 修改位置、旋转、缩放(position/rotation/scale)、可见性(active)、Layer立即生效
- 嵌套 Prefab
- 子 Prefab 修改后同步更新父节点实例
- 组件
- 现只支持cocos组件属性修改后立即生效,用户自定义组件暂时不处理
- 新增 / 删除
- 同步新增 / 删除 节点
- 同步新增 / 删除 组件
- 资源
- 修改图片等资源后立即生效
工具下载
现工具正在测试中,后续将通过更新推送给大家免费使用
工具下载链接