【热重载】开发环境实现预制体热重载功能

先看效果

ezgif-702301be4a227915

背景

在我们的项目开发中,我遇到了一个非常常见的痛点:在 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组件属性修改后立即生效,用户自定义组件暂时不处理
  • 新增 / 删除
    • 同步新增 / 删除 节点
    • 同步新增 / 删除 组件
  • 资源
    • 修改图片等资源后立即生效

工具下载

现工具正在测试中,后续将通过更新推送给大家免费使用
工具下载链接

2赞