> ## Documentation Index
> Fetch the complete documentation index at: https://unity.farlocus.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 热更新

> 方法体级 C# 改动 1-2 秒内在运行中的编辑器生效，结构性改动自动回退重编译

热更新（实验性功能，默认关闭）把方法体级的 C# 改动编译成补丁，在 1 到 2 秒内应用到运行中的编辑器，跳过 Unity 重编译与域重载。在 Play Mode 里调手感、改数值、修逻辑时，游戏不会被打断，内存状态原样保留。

开启方式：「设置」→「热更新与编译」→ `Unity 热更新（实验性）`，需要先启用同页的[编译服务器](/unity/execute-and-compile#编译服务器)。

## 哪些改动走热更新

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

判定是自动的，不需要提前声明改动类型。

## 状态面板怎么读

开启后，会话输入框上方出现`Unity 热更新`指示器，展开可见：

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

## Debug 与 Release

面板中的`编辑器模式`控制 Unity 脚本的优化级别，直接影响热更成功率：

* **`Debug`**：不内联代码，所有方法体改动都能热更新；编辑器略慢。
* **`Release`**：编辑器更快，但部分方法会被内联，被内联方法的改动无法热更，需要一次重编译。

Release 下热更新照常工作：被内联的少数改动会自动触发重编译收敛，无需手动处理。追求最高热更成功率时切换到 `Debug`；编辑器处于 Release 时，设置页也会给出提示与`切换到 Debug`按钮。

面板中的`进入 Play 重载`控制进入 Play Mode 时是否执行域重载：`重载`为 Unity 默认行为，static 状态干净，但已应用的热补丁会被丢弃并重编；`不重载`保留热补丁与内存状态，代价是 static 状态跨播放保留。

## 自检

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

## 边界与安全

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