若Unity卡在“Compiling Scripts”,首先检查Console中的CS错误;其次禁用可疑脚本分批验证;再清除Library强制重建缓存;接着排查.asmdef循环引用或配置错误;最后禁用IDE实时编译功能。

如果您在使用Unity编辑器时发现界面卡在“Compiling Scripts”状态,且长时间无响应或进度条停滞,则很可能是脚本中存在语法错误、引用缺失、循环依赖或编译器无法解析的非法结构。以下是多种可立即尝试的排查与修复方法:
一、检查控制台(Console)中的编译错误
Unity在编译脚本前会先进行语法扫描,任何阻止编译继续的错误都会优先显示在Console窗口。该步骤是定位问题的最直接途径。
1、点击Unity编辑器右下角的Console标签页,确保其处于展开状态。
2、将Console窗口顶部的筛选器设置为Error,隐藏Warning和Log信息。
3、观察是否有红色错误条目,特别注意以CSXXXX(C#编译器错误码)开头的条目,例如CS0103(名称未定义)、CS0246(类型或命名空间未找到)。
4、双击该错误行,Unity将自动跳转至对应脚本的出错行号位置。
二、临时禁用可疑脚本并分批验证
当项目中存在大量脚本或第三方插件时,单一错误可能被掩盖,或因脚本加载顺序导致编译器挂起。通过隔离法可快速锁定问题来源。
1、在Project窗口中,创建一个新文件夹,命名为_TempDisabled。
2、将最近修改过的脚本、自定义Editor脚本、或来自未知来源的插件脚本拖入该文件夹。
3、观察Unity是否退出Compiling状态;若恢复,则说明问题脚本已被移出。
4、每次从该文件夹中移回1–2个脚本,保存后等待编译完成,逐步缩小范围直至复现卡顿。
三、清除Library文件夹强制重建编译缓存
Unity的Library/ScriptAssemblies目录中缓存了已编译的程序集和符号表,损坏或版本不一致的缓存可能导致编译器陷入死循环或无限重试。
1、完全关闭Unity编辑器,确保进程(如Unity Editor、UnityCrashHandler64)已在任务管理器中结束。
2、进入项目根目录,定位并删除整个Library文件夹(注意:不要删除Assets或ProjectSettings)。
3、重新打开Unity项目,此时将触发完整资源导入与脚本重新编译,首次启动会较慢,但可绕过旧缓存引发的阻塞。
4、若编译再次卡在相同位置,说明问题源于源码而非缓存,应返回步骤一或二深入检查。
四、检查Assembly Definition文件(.asmdef)配置冲突
不当的程序集划分(尤其是循环引用、未声明依赖、或Editor脚本误放入运行时程序集)会导致Unity编译器无法确定构建顺序,从而无限等待依赖解析完成。
1、在Project窗口中启用Show All Files,查找所有扩展名为.asmdef的文件。
2、逐个选中.asmdef文件,在Inspector中检查References列表是否包含自身或其他未定义的程序集名称。
3、确认Editor相关脚本(路径含Editor子文件夹)所在的.asmdef中已勾选Use GUIDs for References,并确保其Include Platforms至少包含Editor。
4、对疑似配置异常的.asmdef,右键选择Remove Reference,或临时重命名该.asmdef文件使其失效,再测试编译行为。
五、禁用实时编译与后台编译功能
某些Unity版本(特别是2021.3+ LTS及2022.x)在启用Visual Studio实时分析或Rider插件时,会因外部IDE调试器钩子干扰编译管道,造成Compiling Scripts界面假死。
1、进入Edit → Preferences → External Tools(Windows)或Unity → Preferences → External Tools(macOS)。
2、取消勾选Refresh visual studio project after changes与Auto-refresh选项。
3、在同页面底部,将External Script Editor临时更改为系统记事本(Notepad / TextEdit),排除IDE插件干扰。
4、重启Unity,执行一次手动刷新(Ctrl+R / Cmd+R),观察是否仍卡在编译阶段。

















