Skip to content

第一层:C# 语言本身,比如变量、类、继承、泛型、事件。 第二层:Unity 特有的 C# 用法,比如 MonoBehaviourStart()Update()、协程、组件访问、序列化、Inspector 暴露参数。

你可以按下面这张知识地图学。

一、C# 基础语法 这是最底层,必须先会。

  • 注释:单行注释、多行注释、XML 注释
  • 变量:intfloatboolstring
  • 常量:constreadonly
  • 运算符:+ - * / %
  • 条件判断:ifelseswitch
  • 循环:forwhileforeach
  • 方法:参数、返回值、方法重载
  • 作用域:局部变量、成员变量

Unity 例子:

public float speed = 5f;

void Update()
{
    if (Input.GetKey(KeyCode.W))
    {
        transform.position += Vector3.forward * speed * Time.deltaTime;
    }
}

这里用到了变量、判断、方法、对象属性、乘法、时间增量。

二、面向对象编程 Unity 几乎完全是面向对象的。

你要掌握:

  • class
  • object 对象
  • 字段
  • 属性
  • 方法
  • 构造函数
  • 访问修饰符:publicprivateprotected
  • 继承: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 游戏时天天用的。

你要掌握:

  • GameObject
  • Transform
  • Component
  • MonoBehaviour
  • GetComponent<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、战斗、消息系统、任务系统时经常用的。

你要掌握:

  • delegate
  • event
  • Action
  • Func
  • 回调函数
  • 订阅和取消订阅

例子:

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 提供的类型。

必须掌握:

  • Vector2
  • Vector3
  • Quaternion
  • Color
  • Rect
  • Bounds
  • Ray
  • LayerMask
  • Time
  • Mathf

例子:

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();

十三、命名空间与程序集 项目大了以后会用到。

你要懂:

  • using
  • namespace
  • 类名不能乱重复
  • 文件名和 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
  • structclass 的区别
  • 装箱/拆箱 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 常见例子:

  • GameManager
  • AudioManager
  • UIManager
  • PoolManager
  • SceneLoader
  • SaveManager

十六、反射与特性 高级一些,常用于工具、框架、编辑器扩展。

要知道:

  • Type
  • Attribute
  • GetFields()
  • GetMethods()
  • 自定义 Attribute
  • 编辑器工具自动生成 UI
  • 配表绑定
  • 序列化框架

新手不急着学,但以后做框架会遇到。

十七、编辑器扩展 C# 如果你要做工具,需要掌握:

  • Editor
  • EditorWindow
  • CustomEditor
  • PropertyDrawer
  • MenuItem
  • AssetDatabase
  • SerializedObject
  • SerializedProperty

这些不是做玩法的第一优先级,但对提升开发效率很有用。

十八、网络相关 C# 如果做联网游戏,还会涉及:

  • HTTP 请求
  • WebSocket
  • TCP / UDP
  • JSON / Protobuf
  • 异步请求
  • 消息分发
  • 心跳
  • 断线重连
  • 协议号
  • 错误码
  • token 鉴权

这部分属于 Unity 客户端进阶核心能力。

十九、资源加载相关 C# 常见:

  • Resources.Load
  • AssetBundle
  • Addressables
  • 异步加载
  • 缓存
  • 引用释放
  • 场景加载
  • 进度条
  • 内存卸载

例子:

GameObject prefab = Resources.Load<GameObject>("Player");
Instantiate(prefab);

正式项目更推荐学 Addressables。

二十、数据与存档 C# 需要掌握:

  • PlayerPrefs
  • JSON
  • JsonUtility
  • 文件读写
  • Application.persistentDataPath
  • 加密/校验
  • 版本兼容
  • 存档迁移

例子:

PlayerPrefs.SetInt("Coins", 100);
PlayerPrefs.Save();

推荐学习路线

  1. C# 基础语法:变量、判断、循环、方法。
  2. 类和对象:字段、方法、继承、访问修饰符。
  3. Unity 脚本:MonoBehaviour、生命周期、组件访问。
  4. 常用 API:TransformGameObjectInstantiateDestroy
  5. 集合:ListDictionary
  6. 协程:IEnumeratoryield return
  7. 事件:Actionevent、UI 按钮监听。
  8. 序列化:SerializeField、Inspector 暴露参数。
  9. 性能:对象池、GC、缓存组件。
  10. 进阶:异步、网络、Addressables、编辑器扩展。

最核心的一句话 如果你是零基础学 Unity C#,不要一上来死磕所有 C# 高级语法。你先把这几个练熟:

变量 -> 方法 -> 类 -> MonoBehaviour -> 生命周期 -> GetComponent -> Instantiate/Destroy -> List/Dictionary -> 协程 -> 事件

这条线掌握了,你就能开始真正写 Unity 游戏逻辑了。

参考链接:

文章评价

读完这篇,留下你的看法

暂无审核通过的评价。

登录账号后才能评价。

本站访客数0总站访问量0本页访问量0