Unity 开发速查手册:总览与索引

这套文章按“我现在想查什么”来整理。少讲概念,多放速查表、常用写法、检查清单和容易忘的坑。


快速索引

按任务查文章

我想做什么 先看哪篇 关键词
查 C# 常用写法 01 C# 基础与常用语法 字段、属性、集合、事件、null
不知道代码放哪个生命周期 02 MonoBehaviour 生命周期 Awake、Start、Update、OnEnable
查找对象、获取组件、实例化 Prefab 03 GameObject 与组件操作 GetComponent、Find、Instantiate
整理目录、加载资源、管理 Prefab 04 资源加载与项目结构 Resources、Addressables、ScriptableObject
做 UI、按钮、弹窗、适配 05 UI 开发 Canvas、RectTransform、TMP、Button
写延迟、倒计时、异步加载 06 协程异步与计时器 Coroutine、async、Timer、Cancel
卡顿、GC、掉帧、发热 07 性能优化 Profiler、GC、对象池、渲染
打日志、断点、查构建后问题 08 调试日志与异常处理 Debug、Player.log、try/catch
Console 报错不知道从哪查 09 常见报错与排查清单 NullReference、Missing、Build Failed

分类目录

0. 使用约定

  • Inspector 表示 Unity 面板里拖引用或调参数。
  • Prefab 表示预制体,注意它不能可靠引用场景对象。
  • 热路径 表示每帧、频繁回调、循环、大量对象执行的位置。
  • 低频 表示初始化、打开界面、加载阶段、编辑器工具等位置。
  • 代码块里的注释写用途,复制时按项目命名改掉变量名。

1. Unity 开发总速查

场景 优先方法 少用或慎用
固定对象引用 [SerializeField] private 拖 Inspector 每次运行 GameObject.Find
本对象组件 AwakeGetComponent 后缓存 Update 里反复 GetComponent
跨对象初始化 Bootstrap / Manager 显式初始化 Awake 执行顺序
UI 按钮事件 OnEnable 绑定,OnDisable 解绑 每次打开都 AddListener 不清理
延迟执行 Coroutine / Timer / async 按场景选 多个协程重复启动不保存句柄
大量子弹/特效/UI Item 对象池 高频 Instantiate / Destroy
可配置数据 ScriptableObject / 表格 / Inspector 写死在多个脚本里
性能问题 Profiler 先定位 凭感觉重构
构建后问题 Player.log + 目标平台复现 只看 Editor

2. 写功能前先查

1
2
3
4
5
6
7
功能属于哪个模块?                 # Gameplay / UI / Resource / Audio / Tool
对象从哪里来? # 场景已有 / Prefab 生成 / 对象池 / 动态加载
引用由谁维护? # Inspector / Manager / 事件 / 父节点 / 查找
是否跨场景? # 需要 DontDestroyOnLoad 或重新初始化
是否会被禁用、销毁、回收? # 需要 OnDisable / OnDestroy 清理
配置放哪里? # Inspector / ScriptableObject / 表格 / Addressables
会不会高频执行? # 高频逻辑先考虑性能和 GC

3. 写代码时常查

1
2
3
4
5
6
7
8
9
10
11
[SerializeField] private xxx        # Inspector 可调,但不随便 public
Awake # 缓存自己身上的组件
OnEnable / OnDisable # 事件订阅和取消订阅
Start # 依赖其它对象准备后的初始化
Update # 每帧逻辑,避免查找和分配
FixedUpdate # Rigidbody 相关物理逻辑
LateUpdate # 摄像机跟随、收尾同步
OnDestroy # 最终释放,注意其它单例可能已销毁
TryGetComponent # 获取组件时避免直接空引用
Dictionary.TryGetValue # 查 key 时避免 KeyNotFoundException
CancellationToken # async 任务取消

4. 提交前快速检查

1
2
3
4
5
6
7
8
9
重新打开场景                       # 看 Inspector 引用是否丢
进入 Play Mode # 看 Console 第一条错误
快速重复点击 # 看按钮、弹窗、冷却是否重复触发
快速切场景 # 看协程、async、事件是否残留
禁用再启用对象 # 看 OnEnable / OnDisable 是否成对
销毁对象 # 看旧回调是否访问 MissingReference
目标平台运行 # 移动端、WebGL、PC 表现可能不同
Profiler 简查 # GC Alloc、CPU、UI、Rendering
检查临时日志 # 清掉无用 Debug.Log

5. 常见问题优先定位

现象 先查 对应文章
NullReferenceException Inspector 引用、GetComponent 结果、初始化顺序 01、02、03、09
MissingReferenceException 对象 Destroy 后仍被协程、事件、async 访问 02、06、09
按钮点一次触发多次 AddListener 重复绑定,关闭时没解绑 05、08
UI 显示正常但点不到 EventSystem、Raycast Target、遮挡层 05、09
切场景后旧逻辑还在跑 事件未解绑、协程未停、async 未取消 02、06、08
Editor 正常,打包异常 平台宏、资源路径大小写、IL2CPP 裁剪、插件平台 04、08、09
越运行越卡 对象未释放、列表增长、日志刷屏、资源未卸载 07、08
Prefab 引用丢 引用了场景对象、移动资源丢 .meta 03、04、09

6. 高危操作先确认

1
2
3
4
5
6
7
8
删除资源文件                       # 确认 .meta 一起移动,不要随手删
移动脚本文件 # 类名、文件名、namespace、asmdef 都检查
改 Prefab 结构 # 确认变体和场景实例不会丢引用
改 Resources 路径 # 全局搜索字符串路径
改 Addressables Group # 检查重复打包和 release handle
改 Layer / Tag # 检查碰撞矩阵、Raycast、查找逻辑
改 Input / TimeScale # 检查 UI、暂停、倒计时、动画
改 Player Settings # 检查目标平台和插件兼容

7. PR / Commit 自查模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
功能:
影响场景:
新增脚本:
新增资源:
主要 Prefab:
测试平台:

已检查:
- [ ] Inspector 引用不为空
- [ ] OnEnable / OnDisable 成对
- [ ] 协程、async、Timer 可停止
- [ ] 快速点击不会重复触发
- [ ] 切场景不会访问旧对象
- [ ] Profiler 无明显 GC / 卡顿
- [ ] 目标平台可运行

风险:
后续:

8. 相关 Unity 文章


查不确定的问题时,先用这篇定位专题,再去对应文章复制速查代码。