跳转到主要内容
热更新(实验性功能,默认关闭)把方法体级的 C# 改动编译成补丁,在 1 到 2 秒内应用到运行中的编辑器,跳过 Unity 重编译与域重载。在 Play Mode 里调手感、改数值、修逻辑时,游戏不会被打断,内存状态原样保留。 开启方式:「设置」→「热更新与编译」→ Unity 热更新(实验性),需要先启用同页的编译服务器

哪些改动走热更新

  • 走热更新:方法体内部的逻辑改动。改条件、改公式、调参数、换调用顺序,这类改动占日常迭代的大多数。
  • 回退重编译:结构性改动,包括新增或删除字段、修改方法签名、调整继承关系、新增类型等。这些改动会进入需编译队列,由一次正常的 Unity 重编译收敛,行为与不开热更新时一致。
判定是自动的,不需要提前声明改动类型。

状态面板怎么读

开启后,会话输入框上方出现Unity 热更新指示器,展开可见:
  • 未应用修改:已检测到、尚未在编辑器中生效的改动数。正常情况下会在一两秒内清零。
  • Hot patch 代码:当前以热补丁形式运行的代码数量。域重载或重编译后归零,此后运行的是正常编译产物。
  • 需编译:无法热更、等待重编译收敛的改动数。不为零时可点击面板上的重编译一次性收敛。
  • 失败:热更失败的次数。失败的改动会自动转入重编译,不会丢失。
  • 程序集内存:热补丁程序集占用的内存。
  • 编译器:编译服务器状态(运行中 / 空闲 / 回退 Unity 内置)。

Debug 与 Release

面板中的编辑器模式控制 Unity 脚本的优化级别,直接影响热更成功率:
  • Debug:不内联代码,所有方法体改动都能热更新;编辑器略慢。
  • Release:编辑器更快,但部分方法会被内联,被内联方法的改动无法热更,需要一次重编译。
Release 下热更新照常工作:被内联的少数改动会自动触发重编译收敛,无需手动处理。追求最高热更成功率时切换到 Debug;编辑器处于 Release 时,设置页也会给出提示与切换到 Debug按钮。 面板中的进入 Play 重载控制进入 Play Mode 时是否执行域重载:重载为 Unity 默认行为,static 状态干净,但已应用的热补丁会被丢弃并重编;不重载保留热补丁与内存状态,代价是 static 状态跨播放保留。

自检

怀疑热更新工作不正常时,先跑一次自检:「设置」→「热更新与编译」→ 热重载自检,在编辑器已连接且处于编辑模式时点击运行自检。自检会写入一组测试脚本、进入 Play Mode 逐项验证各类改动的热更行为,结束后自动清理,输出通过与失败项数及完整日志。

边界与安全

热更新不改变改动落盘的方式:Agent 的修改始终先写进源文件,补丁只是让运行中的编辑器提前用上新逻辑。任何无法热更或热更失败的改动都会安全回退到标准重编译,最终状态与从未开启热更新完全一致。它不会把工程改坏,最坏情况只是多等一次编译。