核心原因:Unity 2021 默认每次进 Play 模式都会Reload Domain(域重载)+ Reload Scene,哪怕代码没改也会做一次完整脚本程序集重载,这是卡顿元凶。下面给你一套从 “立刻见效” 到 “长期根治” 的完整方案。
一、立刻见效:关闭 Domain Reload(最有效)
- 打开:Edit → Project Settings → Editor
- 勾选:Enter Play Mode Settings
- 取消勾选:Reload Domain(关键)
- 保留:Reload Scene(一般建议开)
效果:进 Game 模式从十几秒变 1–2 秒;缺点:静态变量不会重置,改代码后仍会触发重载。
二、优化编译与缓存(进一步提速)
1. 清理 Library 与缓存(必做)
关闭 Unity
删除项目目录下的 Library、Temp、Obj
Windows:删除 C:\Users\你的用户名\AppData\Local\Unity\CacheUnity官方开发者社区
重新打开项目
2. 关闭自动刷新(减少后台编译)
Edit → Preferences → Asset Pipeline
取消 Auto Refresh(改完代码手动 Ctrl+R 刷新)Unity官方开发者社区
3. 用 .asmdef 拆分程序集(大项目必备)
原理:默认所有脚本编译成一个大 DLL,改一个脚本全量编译;.asmdef 把代码拆成多个独立程序集,只编译改动部分Unity。
做法:
按模块建文件夹(如 Core、UI、Gameplay)
右键 → Create → Assembly Definition
设置名称与依赖,Editor 代码单独放 Editor 文件夹
三、排查卡顿来源(顽固情况)
第三方插件:禁用 / 删除不用的插件(如旧版 DoTween、UniRx、Editor 扩展),很多插件会强制每次重载。
脚本问题:
检查是否有 [InitializeOnLoad] 或 [InitializeOnLoadMethod] 做耗时操作
避免在构造函数 / 静态构造函数里读写文件、网络、PlayerPrefs
硬盘与内存:
项目放在 SSD/NVMe(机械硬盘是瓶颈)
内存至少 16GB,Unity 2021 吃内存明显
四、终极组合设置(推荐)
Enter Play Mode:开 Settings、关 Reload Domain、开 Reload Scene
Auto Refresh:关闭,手动 Ctrl+R
.asmdef:拆分核心模块
Library:定期删除
插件:只留必要的,更新到适配 2021 的版本
五、常见坑提醒
关 Reload Domain 后,静态变量、单例不会重置,测试时注意状态污染。
改代码后必须 Ctrl+R 或重新开 Auto Refresh 触发重载,否则新代码不生效Unity官方开发者社区。
2021.2 及以上版本有官方已知 Issue:无改动也强制 Reload,可升级到 2021.3 LTS 最新版,部分修复Unity Issue Tracker。
要不要我帮你写一个一键清理 Library/Temp 缓存的批处理脚本,以后双击就能自动清理,不用手动删?