
📖 资源简介
今天分享一套Unity – A计划 1-145 课时的课程资源,内容挺系统的,适合想认真学习的同学。
✨ 资源亮点
- 体系完整:全套10044节视频,从入门到进阶都有覆盖,不是零散的片段。
- 配套齐全:源码、课件、工具都打包好了(共140个压缩包),下载就能直接用。
- 模块丰富:涵盖333个学习模块,知识点覆盖全面。
📚 课程内容
资源清单
| 类型 | 数量 |
|---|---|
| 视频教程 | 10044 节 |
| 压缩文件 | 140 个 |
| 其他文件 | 192 个 |
| 合计 | 10376 |
为什么要系统学 Unity 基础
很多人学 Unity 一上来就想做”王者荣耀””原神”,结果卡在一个角色都动不起来。Unity 的本质是一套组件化的游戏对象引擎,理解它的核心心智模型,后面无论是做 2D、3D、ARPG 还是 MOBA 都不会偏。这套 A 计划从编辑器操作、C# 脚本一路讲到物理、UI、动画、协程与性能优化,正是打地基的过程。下面把这套课程背后最容易卡住、面试也最爱问的核心知识点串一遍。
一、编辑器与核心心智模型
Unity 编辑器的几个窗口分工必须烂熟:
| 窗口 | 作用 |
|---|---|
| Scene | 场景编辑视图,摆放物体 |
| Game | 游戏运行时最终画面(相机看到的) |
| Hierarchy | 当前场景中的游戏对象树 |
| Project | 工程的所有资源文件(Assets) |
| Inspector | 选中对象挂载的组件属性 |
| Console | 日志、警告、报错 |
Unity 里没有”凭空的物体”,一切都是 GameObject(游戏对象)+ Component(组件) 的组合。GameObject 本身几乎是空壳,真正决定它”是什么”的是挂在它身上的组件:Transform(位置旋转缩放,必挂)、MeshRenderer(渲染模型)、Collider(碰撞体)、Rigidbody(受物理驱动)、自定义脚本等。想让一个物体会跳,就加 Rigidbody + CapsuleCollider,再写脚本读输入施加力——这就是组件思想。
二、Transform 与坐标:local vs world
Transform 存了 position / rotation / scale。关键区分本地坐标与世界坐标:
// 世界坐标:相对于场景原点
transform.position = new Vector3(0, 1, 0);
// 本地坐标:相对于父节点,父节点移动时会跟着变换
transform.localPosition = new Vector3(0, 1, 0);
// 面向世界相机方向
transform.LookAt(Camera.main.transform);
父子层级下,子物体的 localPosition 是相对父物体的偏移。做 UI 拖放、角色挂武器、相机跟随,这层关系搞混是 90%”物体乱飞”bug 的根源。
三、脚本生命周期(面试高频)
继承自 MonoBehaviour 的脚本,Unity 按固定顺序回调:
| 顺序 | 回调 | 触发时机 | 用途 |
|---|---|---|---|
| 1 | Awake() |
实例化时,最先 | 自身初始化、找引用 |
| 2 | OnEnable() |
每次启用 | 物体每次激活 |
| 3 | Start() |
第一帧 Update 前 | 依赖其他对象的初始化 |
| 4 | FixedUpdate() |
固定间隔(默认 0.02s) | 物理相关逻辑 |
| 5 | Update() |
每帧 | 普通逻辑、输入 |
| 6 | LateUpdate() |
每帧之后 | 相机跟随(逻辑跑完再跟) |
| 7 | OnDisable() |
禁用时 | 与 OnEnable 配对 |
| 8 | OnDestroy() |
销毁时 | 清理 |
public class Player : MonoBehaviour
{
void Awake() => Debug.Log("Awake: 只调一次,最先");
void Start() => Debug.Log("Start: 第一次可跑逻辑");
void FixedUpdate() => MoveByPhysics(); // 走物理
void Update() => ReadInput(); // 走输入
void LateUpdate() => CameraFollow(); // 逻辑结束再跟随
}
坑点:移动如果写在 Update 里用 Time.deltaTime 做非物理位移没问题;但用 Rigidbody 时必须放 FixedUpdate,否则不同帧率下物理表现不一致。
四、输入系统
旧版输入管理器(Input Manager)用起来最直接:
void Update()
{
// 按下瞬间触发一次
if (Input.GetKeyDown(KeyCode.Space)) Jump();
// 按住持续取值(-1~1),用于移动
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
transform.Translate(new Vector3(h, 0, v) * speed * Time.deltaTime);
// 鼠标左键按下
if (Input.GetMouseButton(0)) Attack();
}
新项目官方推荐 新 Input System(Input System 包),更适合多平台、重绑定、手柄与触控,但学习曲线陡。初学阶段先把旧版 Input.GetKey/GetAxis/GetMouseButton 吃透即可。
五、物理与碰撞检测
物理三件套:Rigidbody(受力运动)、Collider(碰撞形状)、Physic Material(摩擦/弹性)。想触发回调必须满足条件:双方都有 Collider,且至少一方带 Rigidbody 并设为非 Kinematic。
// 碰撞体接触(需要 IsTrigger = false,默认)
void OnCollisionEnter(Collision other) => Debug.Log("撞到了: " + other.gameObject.name);
void OnCollisionStay(Collision other) { }
void OnCollisionExit(Collision other) { }
// 触发器(Collider 勾选 IsTrigger,用于金币、传送门)
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Coin")) Destroy(other.gameObject);
}
射线检测在射击、选敌、点击地面移动里无处不在:
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition),
out RaycastHit hit, 100f, LayerMask.GetMask("Ground")))
{
transform.position = hit.point; // 点哪走哪
}
六、协程(Coroutine):异步的基础
协程用 IEnumerator + yield return 实现”分帧等待”,做延时、技能 CD、剧情演出比 Invoke 灵活得多:
IEnumerator SkillCD(float seconds)
{
yield return new WaitForSeconds(seconds); // 等 seconds 秒
canCast = true;
}
void CastSkill()
{
canCast = false;
StartCoroutine(SkillCD(5f));
}
yield return null 等一帧、WaitForFixedUpdate 等物理帧、WaitForEndOfFrame 等渲染完。注意协程停不掉时要用 StopCoroutine 或在物体销毁时配合 StartCoroutine 句柄。
七、UGUI 与动画入门
UGUI 基于 Canvas,三种 Render Mode:Screen Space - Overlay(纯屏幕 UI)、Screen Space - Camera、World Space(世界中的 3D UI)。常用控件 Text / Image / Button / Slider / ScrollRect,配合 HorizontalLayoutGroup、ContentSizeFitter 做自适应布局。
动画系统核心是 Animator 状态机:Animation Clip 是一段关键帧动画,Animator Controller 用状态(State)+ 过渡(Transition)+ 参数(Parameter:Bool/Float/Trigger)驱动状态切换;复杂角色走路用 Blend Tree 根据速度混合走路/跑步动画。
补充:场景管理与资源加载
游戏不可能一个场景装下全部内容,必然要按菜单、关卡、战斗分场景。SceneManager 负责切换,正式项目都用异步加载避免卡主线程:
using UnityEngine.SceneManagement;
// 同步切换(小场景可用,会卡一下)
// SceneManager.LoadScene("Battle");
// 异步加载,带进度条
IEnumerator LoadSceneAsync(string sceneName)
{
AsyncOperation op = SceneManager.LoadSceneAsync(sceneName);
while (!op.isDone)
{
float progress = op.progress; // 0~0.9 之间
yield return null;
}
}
资源加载的三代方案要建立认知:Resources 文件夹最简单但会把所有资源打进包、运行时按名字同步加载,只适合小项目;AssetBundle 是老牌分包与热更方案,工程复杂;官方现在主推 Addressables,用地址(Address)异步加载、按需下载、自动管理引用计数,是中大型项目的首选。入门阶段先用 Resources 理解概念即可。
八、学习路线导读
按这套课程节奏建议这样走:
- 先过编辑器与 C# 语法,能独立写脚本挂物体;
- 吃透生命周期与输入,做一个 WASD 移动 + 跳跃的小球;
- 进物理与碰撞,做打砖块/弹球;
- 学 UGUI 做血条、计分板;
- 动画系统 给角色配上待机、跑、跳;
- 协程 + 场景管理 做开始菜单与场景切换;
- 最后碰性能优化:用 Profiler 看耗时,理解 Draw Call 合批、对象池、LOD、遮挡剔除。
九、高频面试点小结
- GameObject 与 Component 的关系?(空壳 + 组件)
Awake / Start区别?Update / FixedUpdate / LateUpdate区别?- 碰撞和触发的区别?触发条件?
- 协程原理?
yield return常见用法? - 提升性能:Draw Call、合批、对象池、UGUI 重建?
总结
Unity 入门没有捷径,但有正确的路:先把”组件化 + 生命周期 + 坐标变换”这三块刻进肌肉记忆,后面所有系统都是在它们之上拼装。这套 A 计划课时量大、模块全,建议跟着敲而不是只看,每学一章就做一个最小 Demo,遇到报错先查 Console 再搜——这才是把 1 万多节视频真正变成自己能力的方式。
资源获取
💡 建议:尽快保存到本地网盘或电脑,避免分享链接后期失效。
整理不易,如果对你有帮助,欢迎分享给更多需要的朋友。












请登录后查看评论内容