故障排除
-
我的更改没有显示出来
- 确保您正在编辑的文件已保存。
- 验证您编辑的函数在热重载后是否再次被调用。例如,在编辑MonoBehaviours中的函数时,我们不会调用Start,因为这可能会扰乱您游戏的逻辑。
- 检查Hot Reload服务器窗口(黑色弹出窗口)中是否有任何错误或警告。此窗口可能会提供有关您的更改为何未在游戏中反映出来的其他信息。
-
Hot Reload无法启动
如果您正在运行MacOS并且Hot Reload无法启动,请尝试以下操作:
- 在
/Users/Shared/singularitygroup-hotreload/
中找到HotReload
可执行文件 - 尝试打开文件以验证文件是否确实已损坏:
- 提取HotReload.app.zip存档中的应用程序,并用外部的应用程序替换它
- 在
-
我的更改只有在我聚焦Unity编辑器窗口时才会应用
默认情况下,Unity编辑器仅在聚焦时运行。您可以在
Edit -> Project Settings -> Player -> Run In Background
中更改此设置
-
为什么hot reload需要很长时间才能注意到我的更改?
Hot Reload仅在保存相关C#文件时检测并更新更改。默认情况下,大多数文本编辑器在您切换到其他窗口时会自动保存。如果此设置被禁用,我们建议启用它。
一些流行文本编辑器的配置:
- JetBrains Rider
- Settings | Appearance & Behavior | System Settings -> Save files when switching to a different application of built-in terminal
- Visual Studio Code
- File (top-left of the window) -> autoSave
- Visual Studio 2022
- Tools -> Options -> Environment -> Preview Features -> Autosave
- JetBrains Rider
-
每次我进入/退出播放模式时Unity都会重新编译
使用Hot Reload时,在编辑器中进入或退出播放模式时无需重新编译。
但是,一些第三方资产、Unity版本和自定义脚本可能会在播放模式状态更改时强制重新编译。
您可以通过对项目进行调整来改善(消除)这些加载时间。 减少加载时间所需的具体更改将根据您的项目配置而有所不同。此问题的最常见原因是精灵打包器模式 (opens in a new tab)。您需要确保它在编辑器中被禁用。
您还可以启用
disableCompilingFromEditorScripts
设置,该设置在大多数情况下可以解决问题。 有关如何启用额外设置,请参阅配置,有关该选项的更多详细信息,请参阅此部分。
-
Hot Reload在Windows上占用大量内存/CPU
为了检测哪个文件已更改,Hot Reload使用文件观察器。在正常执行期间,文件观察器可能会导致Windows Defender进行大量扫描,从而导致高内存/CPU。我们建议您将项目目录从Windows Defender中排除 - 请参阅Windows文档 (opens in a new tab)。
在我们的工作室中,这也帮助提高了Unity编辑器的整体性能(启动、常规编译、导入),因此我们建议所有使用Unity编辑器的人都这样做,即使您不使用Hot Reload。
请注意,从Windows Defender中将白名单不是必需的,并且其影响通常仅在非常大的项目上可见。即使启用了严格的防病毒软件,Hot Reload也能可靠地工作。
-
热重载Unity作业导致警告
在Unity 2022及更高版本中,每次热重载Unity作业时都会出现警告。示例警告 (opens in a new tab)。
不幸的是,这个错误是不可避免的,并且每当热重载作业时都会被记录。有关更多信息,请参阅一位Unity员工解释为什么会记录此警告的这篇文章 (opens in a new tab)。
-
在Hot Reload窗口中单击按钮导致警告“当有hotcontrol时不应捕获”。
不幸的是,这是一个已知的Unity错误,而不是Hot Reload的问题。因此,我们无法在我们这边解决这个问题。有关更多信息,请参阅以下Unity答案 (opens in a new tab)。
-
我删除了Hot Reload,无法再让我的更改“自动刷新”。
为了让Hot Reload在所有Unity版本上正常运行,我们更新了一个已被Unity弃用但仍在Visual Studio和Rider等IDE中使用的首选项。具体来说,我们正在运行以下代码:
EditorPrefs.SetInt("kAutoRefresh", 0);
如果您希望自动刷新能正常工作,您需要在Unity中更新“自动刷新”设置,以便自动刷新更改,此外还需要在Unity中运行一次以下代码:
EditorPrefs.SetInt("kAutoRefresh", 1);
执行此操作后,您的更改将再次开始正常自动刷新。
-
Watchman进程遇到错误
如果您的项目路径包含非ASCII字符,则很可能会出现此错误。
要消除此警告,您可以执行以下操作:
- 停止Hot Reload
- 在任务管理器中终止“watchman”进程
- 在项目根目录下创建
hot-reload-config.json
文件 - 在其中添加以下数据:
{ "useSystemFilewatcher": true }
- 保存文件并重新启动Hot Reload
-
我在代码中修改了本地语言文本,但它显示为乱码
要解决此问题,请将代码编辑器的编码更改为UTF-8。
-
Hot Reload无法启动
在极少数情况下,由于操作系统或其他程序的文件锁定,Hot Reload首次启动失败。
这是一个临时问题,通常在重新启动项目或重新启动计算机后即可解决。
-
使用Hot Reload编译失败,并出现错误CS0245:找不到类型或命名空间名称“Sirenix”
如果将Odin Inspector (opens in a new tab)导入到带有Hot Reload的项目中,则在删除Odin后,必须手动删除其自定义的脚本定义符号 (opens in a new tab)。