Unity – A计划 1-145 课时全套教程资源分享

封面图

📖 资源简介

今天分享一套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 理解概念即可。

八、学习路线导读

按这套课程节奏建议这样走:

  1. 先过编辑器与 C# 语法,能独立写脚本挂物体;
  2. 吃透生命周期与输入,做一个 WASD 移动 + 跳跃的小球;
  3. 进物理与碰撞,做打砖块/弹球;
  4. 学 UGUI 做血条、计分板;
  5. 动画系统 给角色配上待机、跑、跳;
  6. 协程 + 场景管理 做开始菜单与场景切换;
  7. 最后碰性能优化:用 Profiler 看耗时,理解 Draw Call 合批、对象池、LOD、遮挡剔除。

九、高频面试点小结

  • GameObject 与 Component 的关系?(空壳 + 组件)
  • Awake / Start 区别?Update / FixedUpdate / LateUpdate 区别?
  • 碰撞和触发的区别?触发条件?
  • 协程原理?yield return 常见用法?
  • 提升性能:Draw Call、合批、对象池、UGUI 重建?

总结

Unity 入门没有捷径,但有正确的路:先把”组件化 + 生命周期 + 坐标变换”这三块刻进肌肉记忆,后面所有系统都是在它们之上拼装。这套 A 计划课时量大、模块全,建议跟着敲而不是只看,每学一章就做一个最小 Demo,遇到报错先查 Console 再搜——这才是把 1 万多节视频真正变成自己能力的方式。

资源获取

💡 建议:尽快保存到本地网盘或电脑,避免分享链接后期失效。


整理不易,如果对你有帮助,欢迎分享给更多需要的朋友。

Unity - A计划 1-145 课时全套教程资源分享-速优课
Unity – A计划 1-145 课时全套教程资源分享
此内容为付费阅读,请付费后查看
¥2
立即购买
您当前未登录!建议登陆后购买,可保存购买订单
付费阅读
© 版权声明
THE END
喜欢就支持一下吧
点赞6
相关推荐
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容

温馨提示:
1、本内容转载于网络,版权归原作者所有!
2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
3、本内容若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!