【Unity 入门教程】二、核心概念
前言
在进行游戏开发之前,需要了解一些游戏相关的核心概念,有利于对游戏开发框架有一定理解能力。
简而言之,Unity = 场景(Scene) + 物体(GameObject) + 功能(Component + Script) + 资源(Assets),所有东西都在每帧循环中更新和渲染。
速记表
概念 | 是什么 | 类比(前端/现实世界) | 理解方式 |
---|---|---|---|
Scene(场景) | 游戏运行的空间/关卡 | 网页的页面 | 一个游戏可包含多个场景,如登录场景、战斗场景 |
GameObject(游戏对象) | Unity 世界里的所有东西(角色、树、灯、摄像机) | DOM 节点(div、img、button) | 是容器,本身没功能 |
Component(组件) | 赋予 GameObject 功能的模块 | DOM 的属性 / CSS + JS | 物体的行为和外观由组件决定 |
Transform | 位置、旋转、缩放 | style: position/rotate/scale | 每个物体都必须有 |
Rigidbody(刚体) | 让物体受物理力影响(重力、推力) | 物理引擎里的动力学 | 物体才会“掉下来”或被推 |
Collider(碰撞体) | 定义物体的物理边界 | div 的点击区域 | 用于检测碰撞或触发 |
Script(脚本) | 用 C# 写的逻辑 | JS 脚本/React 逻辑 | 控制交互,如键盘输入、移动 |
Prefab(预制体) | 可复用的 GameObject 模板 | React 组件 | 一张卡牌的模板,可实例化多个 |
Camera(摄像机) | 决定玩家看到的画面 | 浏览器 viewport / 摄像机 | 没有相机就看不到世界 |
Lighting(光照) | 控制光影和氛围 | CSS 的 box-shadow + filter | 没有光源就一片漆黑 |
Assets(资源) | 模型、贴图、音效、脚本的集合 | /public 或 /assets 文件夹 | 游戏的素材库 |
Game Loop(游戏循环) | 每帧处理输入、逻辑、物理、渲染 | requestAnimationFrame 循环 | 游戏实时运行的核心机制 |
1. 场景(Scene)
类似网页界面,是游戏运行时的一个独立空间。
一个游戏可以有多个 Scene。比如:登录界面、战斗场景、结算界面。
开发时,你在 Scene 里放各种物体(3D Cube、模型、灯光、摄像机)。
理解方式:游戏从“主菜单场景”跳到“战斗场景”,再切到“结算场景”,就像网页跳转。
2. 游戏对象(GameObject)
Unity 世界里的 一切东西都是 GameObject(方块、角色、灯光、相机)。
但 GameObject 本身只是一个“空容器”,没有功能。
功能由组件(Component) 决定。比如,前端里 div 是个空盒子,样式/逻辑要靠 CSS/JS 脚本去赋予。
理解方式:GameObject 只是容器,没有功能,需要组件来赋予它行为。
3. 组件(Component)
挂载在 GameObject 上的“功能模块”。
常见组件:
- Transform:位置、旋转、缩放(每个物体都必须有)。
- Rigidbody:让物体受物理影响(重力、碰撞)。
- Collider:碰撞体,决定物体是否能和别的东西碰撞。
- Script(C# 脚本):你写的逻辑。
类比:前端的 CSS + JS 属性,决定 DOM 的样子和交互。
例子:
- Transform(位置/旋转/缩放)= div 的 style
- Rigidbody(刚体)= 让物体受物理力影响
- Collider(碰撞体)= 定义物体边界
4. 脚本(Script,C#)
Unity 用 C# 脚本 写逻辑。
常见生命周期函数:
- Start():物体创建时运行一次。
- Update():每帧都会执行(适合实时输入检测)。
- FixedUpdate():每帧固定时间运行(适合物理运算)。
- LateUpdate():在所有 Update() 之后运行(常用于摄像机跟随)。
理解方式:脚本通过 Update() 每帧运行,持续控制 GameObject。
5. 物理系统
类似于模拟的现实生活中的物理系统。
类比:前端里的 碰撞检测 / 动画引擎,但更强大。
常见物理模型有:
- Rigidbody(刚体):受重力和力的影响。
- Collider(碰撞体):形状边界,决定是否能“撞上”。
- Trigger(触发器):一种特殊 Collider,不阻挡但能触发事件(类似 onClick)。
Rigidbody + Collider = 球能落地
Trigger = 碰到某个区域触发事件
6. 摄像机(Camera)
决定玩家看到的画面。
你可以有多个 Camera(主角视角 / 小地图)。
类比:网页中的 viewport,但可以随时移动/旋转。
理解方式:如果没有 Camera,就像前端没有渲染 DOM。
7. 光照(Lighting)
灯光决定物体的亮暗和阴影。
常见光源:Directional Light(太阳光)、Point Light(灯泡)、Spotlight(手电筒)。
类比:前端里的 CSS box-shadow + filter。
理解方式:没有光,3D 世界就是一片漆黑。
8. 预制体(Prefab)
可以理解为 组件模板 / 可复用对象,现实生活中理解成预制菜。
类比:React 里的 可复用组件。
例子:你做了一张卡牌,把它保存为 Prefab,以后生成 100 张卡牌时直接实例化。
9. 资源(Assets)
你在 Unity 里用到的一切素材(模型、贴图、音效、脚本)。
类比:前端的 静态资源目录(/public、/assets)。
10. 运行循环(Game Loop)
Unity 的游戏本质上是一个循环:
Unity 每帧执行的逻辑:
- 处理输入(键盘/鼠标/手柄)
- 更新逻辑(脚本)
- 更新物理(重力、碰撞)
- 渲染画面(Camera 输出)
类比:前端的 requestAnimationFrame 循环,不断重绘页面。