Appearance
第一层:C# 语言本身,比如变量、类、继承、泛型、事件。 第二层:Unity 特有的 C# 用法,比如 MonoBehaviour、Start()、Update()、协程、组件访问、序列化、Inspector 暴露参数。
你可以按下面这张知识地图学。
一、C# 基础语法 这是最底层,必须先会。
- 注释:单行注释、多行注释、XML 注释
- 变量:
int、float、bool、string - 常量:
const、readonly - 运算符:
+ - * / % - 条件判断:
if、else、switch - 循环:
for、while、foreach - 方法:参数、返回值、方法重载
- 作用域:局部变量、成员变量
Unity 例子:
public float speed = 5f;
void Update()
{
if (Input.GetKey(KeyCode.W))
{
transform.position += Vector3.forward * speed * Time.deltaTime;
}
}这里用到了变量、判断、方法、对象属性、乘法、时间增量。
二、面向对象编程 Unity 几乎完全是面向对象的。
你要掌握:
class类object对象- 字段
- 属性
- 方法
- 构造函数
- 访问修饰符:
public、private、protected - 继承:
class Player : MonoBehaviour - 封装
- 多态
- 抽象类:
abstract - 接口:
interface
Unity 里最常见的是:
public class PlayerController : MonoBehaviour
{
public float speed;
private void Move()
{
// 移动逻辑
}
}PlayerController 是类,挂到 GameObject 上之后,它就是一个组件对象。
三、Unity 脚本生命周期 这是 Unity C# 最重要的部分之一。
常见生命周期方法:
Awake():对象加载时调用,适合初始化引用OnEnable():组件启用时调用Start():第一帧前调用,适合初始化游戏逻辑Update():每帧调用,适合输入、普通逻辑FixedUpdate():固定时间调用,适合物理LateUpdate():Update 后调用,适合相机跟随OnDisable():组件禁用时调用OnDestroy():对象销毁时调用
新手重点记:
void Start()
{
// 游戏开始时做一次
}
void Update()
{
// 每一帧都做
}四、Unity 对象与组件 API 这是写 Unity 游戏时天天用的。
你要掌握:
GameObjectTransformComponentMonoBehaviourGetComponent<T>()AddComponent<T>()FindObjectOfType<T>()Instantiate()Destroy()SetActive()
例子:
Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
void Start()
{
rb.AddForce(Vector3.up * 5f, ForceMode.Impulse);
}这就是“脚本访问组件”。
五、集合与数据结构 游戏里大量数据都要用集合装起来。
常用:
- 数组:
int[] List<T>:列表Dictionary<TKey, TValue>:字典Queue<T>:队列Stack<T>:栈HashSet<T>:去重集合
Unity 例子:
public List<GameObject> enemies = new List<GameObject>();
void ClearEnemies()
{
foreach (GameObject enemy in enemies)
{
Destroy(enemy);
}
enemies.Clear();
}背包、怪物列表、任务列表、技能表、对象池都会用到集合。
六、泛型 泛型就是让代码可以适配不同类型。
常见形式:
List<int>
List<string>
List<GameObject>
Dictionary<string, int>
GetComponent<Rigidbody>()Unity 里最常见的泛型是:
GetComponent<Rigidbody>();
GetComponent<Animator>();
GetComponent<AudioSource>();T 可以理解成“类型占位符”。
七、委托、事件、Action 这是做 UI、战斗、消息系统、任务系统时经常用的。
你要掌握:
delegateeventActionFunc- 回调函数
- 订阅和取消订阅
例子:
public event Action OnPlayerDead;
void Die()
{
OnPlayerDead?.Invoke();
}UI 或其他系统可以监听:
player.OnPlayerDead += ShowGameOver;新手理解: 事件就是“某件事发生时,通知关心它的人”。
八、协程 Coroutine Unity 特色,非常重要。
适合做:
- 延迟执行
- 分步骤执行
- 技能冷却
- 动画流程
- 生成怪物
- 等待几秒后销毁
- 加载过程
例子:
IEnumerator SpawnEnemy()
{
yield return new WaitForSeconds(2f);
Instantiate(enemyPrefab);
}
void Start()
{
StartCoroutine(SpawnEnemy());
}注意:协程不是多线程,它仍然主要运行在 Unity 主线程里。
九、异步 async/await 现代 Unity 项目也会用到。
常见场景:
- 网络请求
- 资源加载
- 存档读取
- Addressables 加载
- 登录流程
- 等待服务器返回
例子:
async Task LoadPlayerData()
{
await Task.Delay(1000);
Debug.Log("玩家数据加载完成");
}新手阶段先学协程,后面再学 async/await。
十、Unity 序列化与 Inspector Unity 不是所有 C# 字段都会显示在 Inspector。
常见规则:
public int hp;
[SerializeField] private float speed;
[HideInInspector] public int score;你要掌握:
public字段会显示[SerializeField] private也会显示static通常不会序列化- 属性
{ get; set; }默认不显示 - Unity 支持序列化部分类型,不是所有 C# 类型都支持
常用 Attribute:
[SerializeField][Header("移动设置")][Tooltip("角色移动速度")][Range(0, 10)][HideInInspector][RequireComponent(typeof(Rigidbody))]
十一、Unity 常用结构体 这些不是普通 C# 自带的,是 Unity 提供的类型。
必须掌握:
Vector2Vector3QuaternionColorRectBoundsRayLayerMaskTimeMathf
例子:
transform.position += Vector3.right * speed * Time.deltaTime;这里的 Vector3.right 是方向,Time.deltaTime 是每帧间隔时间。
十二、输入、物理、动画、UI 相关脚本 Unity 开发不是只写纯 C#,还要会用 C# 操作系统模块。
输入:
Input.GetKeyDown(KeyCode.Space)物理:
void OnCollisionEnter(Collision collision)
{
Debug.Log("碰撞了");
}触发器:
void OnTriggerEnter(Collider other)
{
Debug.Log("进入触发区");
}动画:
animator.SetBool("Run", true);UI:
button.onClick.AddListener(StartGame);音频:
audioSource.Play();十三、命名空间与程序集 项目大了以后会用到。
你要懂:
usingnamespace- 类名不能乱重复
- 文件名和
MonoBehaviour类名最好一致 - Assembly Definition,也就是
.asmdef
例子:
using UnityEngine;
using UnityEngine.UI;
namespace Game.UI
{
public class MainMenu : MonoBehaviour
{
}
}十四、内存与性能相关 C# Unity 客户端很在意性能,特别是移动端。
需要掌握:
- GC 垃圾回收
- 避免频繁
new - 避免在
Update()里大量分配对象 - 对象池 Object Pool
- 字符串拼接成本
foreach在部分场景的分配问题- LINQ 好用但可能产生 GC
- 缓存组件引用,不要每帧
GetComponent struct和class的区别- 装箱/拆箱 boxing/unboxing
不推荐:
void Update()
{
GetComponent<Rigidbody>().AddForce(Vector3.forward);
}更推荐:
Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>();
}十五、设计模式 不是一开始就必须全学,但做项目会遇到。
常见:
- 单例模式 Singleton
- 状态机 State Machine
- 观察者模式 Observer
- 工厂模式 Factory
- 对象池 Object Pool
- 命令模式 Command
- MVC / MVP / MVVM,常用于 UI
- 服务定位器 Service Locator
- 事件总线 Event Bus
Unity 常见例子:
GameManagerAudioManagerUIManagerPoolManagerSceneLoaderSaveManager
十六、反射与特性 高级一些,常用于工具、框架、编辑器扩展。
要知道:
TypeAttributeGetFields()GetMethods()- 自定义 Attribute
- 编辑器工具自动生成 UI
- 配表绑定
- 序列化框架
新手不急着学,但以后做框架会遇到。
十七、编辑器扩展 C# 如果你要做工具,需要掌握:
EditorEditorWindowCustomEditorPropertyDrawerMenuItemAssetDatabaseSerializedObjectSerializedProperty
这些不是做玩法的第一优先级,但对提升开发效率很有用。
十八、网络相关 C# 如果做联网游戏,还会涉及:
- HTTP 请求
- WebSocket
- TCP / UDP
- JSON / Protobuf
- 异步请求
- 消息分发
- 心跳
- 断线重连
- 协议号
- 错误码
- token 鉴权
这部分属于 Unity 客户端进阶核心能力。
十九、资源加载相关 C# 常见:
Resources.LoadAssetBundleAddressables- 异步加载
- 缓存
- 引用释放
- 场景加载
- 进度条
- 内存卸载
例子:
GameObject prefab = Resources.Load<GameObject>("Player");
Instantiate(prefab);正式项目更推荐学 Addressables。
二十、数据与存档 C# 需要掌握:
PlayerPrefs- JSON
JsonUtility- 文件读写
Application.persistentDataPath- 加密/校验
- 版本兼容
- 存档迁移
例子:
PlayerPrefs.SetInt("Coins", 100);
PlayerPrefs.Save();推荐学习路线
- C# 基础语法:变量、判断、循环、方法。
- 类和对象:字段、方法、继承、访问修饰符。
- Unity 脚本:
MonoBehaviour、生命周期、组件访问。 - 常用 API:
Transform、GameObject、Instantiate、Destroy。 - 集合:
List、Dictionary。 - 协程:
IEnumerator、yield return。 - 事件:
Action、event、UI 按钮监听。 - 序列化:
SerializeField、Inspector 暴露参数。 - 性能:对象池、GC、缓存组件。
- 进阶:异步、网络、Addressables、编辑器扩展。
最核心的一句话 如果你是零基础学 Unity C#,不要一上来死磕所有 C# 高级语法。你先把这几个练熟:
变量 -> 方法 -> 类 -> MonoBehaviour -> 生命周期 -> GetComponent -> Instantiate/Destroy -> List/Dictionary -> 协程 -> 事件这条线掌握了,你就能开始真正写 Unity 游戏逻辑了。
参考链接: