4、游戏对象与组件:理解GameObject与Component的关系,动手搭建第一个场景
好,咱们进入第四课。
前几节课我们把 Unity 的界面摸了一遍,也知道了什么是场景。今天要聊的,是 Unity 里最核心、最基础的一对概念——GameObject(游戏对象)和Component(组件)。
说白了,你在 Unity 里做的所有事情,都是在跟这两个东西打交道。你想想看,一个角色、一盏灯、一个空位标记,它们本质上都是 GameObject。而它们能“动”、能“发光”、能“被碰撞”,靠的都是身上挂着的 Component。
4.1 什么是 GameObject?
GameObject 就是场景里的“容器”。它本身啥也不干,就是一个空壳子。但它可以装东西——装各种 Component。
我刚开始学的时候,总觉得 GameObject 就是“物体”。后来踩了个坑才明白:GameObject 不等于“可见的物体”。一个空 GameObject 在场景里是看不见的,但它可以作为一个“节点”来组织逻辑。比如用来挂脚本、做父级、或者当 spawn point(生成点)。
核心理解:
- GameObject 是“载体”
- Component 是“功能”
- 一个 GameObject 可以挂多个 Component
- 没有 Component 的 GameObject 就是个空壳
4.2 什么是 Component?
Component 才是真正干活的东西。
比如你想让一个方块显示出来,你需要给它挂一个 MeshRenderer 组件。你想让它有物理效果,就挂一个 Rigidbody。你想让它被摄像机拍到,就得有 Transform(这个每个 GameObject 默认都有)。
我记得有一次做项目,一个角色怎么都不显示。我检查了模型、材质、路径……折腾了半小时。最后发现,MeshRenderer 组件被不小心删掉了。嗯,这种低级错误,谁没犯过呢?
4.3 它们的关系:一句话总结
GameObject 是“身体”,Component 是“器官”。
身体本身不能呼吸、不能看、不能走路。但装上肺就能呼吸,装上眼睛就能看,装上腿就能走。每个器官负责一件事,组合起来,这个“身体”就有了完整的功能。
我的习惯:每次新建一个 GameObject,我都会先想清楚——它需要哪些 Component?最少需要几个?能不挂的就不挂。组件多了,性能会下降,调试也麻烦。
4.4 动手:搭建第一个场景
光说不练假把式。咱们现在动手,搭一个最简单的场景。
4.4.1 创建基础物体
- 在 Hierarchy 窗口右键 → 3D Object → Cube(创建一个立方体)
- 同样方式创建一个 Plane(平面)
- 再创建一个 Directional Light(方向光)——如果场景里没有的话
这时候你的场景应该有一个方块放在一个平面上,有光照。
4.4.2 观察 GameObject 和 Component
选中那个 Cube,看右边的 Inspector 面板。
你会看到:
- Transform:位置、旋转、缩放(每个 GameObject 都有)
- Mesh Filter:指定了用哪个模型(这里是 Cube 的网格)
- Mesh Renderer:负责把网格渲染出来
- Box Collider:碰撞盒,让物体能发生碰撞
你看,一个简单的 Cube,背后挂了 4 个组件。每个组件负责一件事。
4.3.3 添加一个组件
咱们让这个 Cube 能“掉下来”。
- 选中 Cube
- 在 Inspector 底部点击 Add Component
- 搜索
Rigidbody,点击添加
现在点击播放按钮(Play),你会看到 Cube 受重力影响,掉到了平面上。
我曾经犯过的错:给一个物体加了 Rigidbody,但忘了加 Collider。结果物体直接穿透平面掉下去了。记住:Rigidbody 负责物理计算,Collider 负责碰撞检测。两者缺一不可。
4.5 常用组件一览
刚开始你不需要记住所有组件,但下面这几个,你得混个脸熟:
| 组件名 | 作用 | 必知程度 |
|---|---|---|
| Transform | 位置、旋转、缩放 | ⭐⭐⭐⭐⭐ |
| Mesh Renderer | 显示模型 | ⭐⭐⭐⭐⭐ |
| Collider | 碰撞检测(Box、Sphere、Capsule 等) | ⭐⭐⭐⭐ |
| Rigidbody | 物理模拟(重力、力、速度) | ⭐⭐⭐⭐ |
| Camera | 渲染画面给玩家看 | ⭐⭐⭐⭐⭐ |
| Light | 光照(Directional、Point、Spot) | ⭐⭐⭐ |
| Audio Source | 播放声音 | ⭐⭐⭐ |
4.6 组件的工作方式:组合优于继承
这里我想多说一句。很多新手会问:为什么 Unity 不用“类继承”的方式来设计对象?
原因很简单:组合更灵活。
你想想看,如果用一个“角色类”来继承,那你想让一个角色既能走路又能飞,就得改类结构。但在 Unity 里,你只需要给 GameObject 挂一个“走路脚本”和一个“飞行脚本”。想加就加,想删就删。这就是组件式架构的魅力。
我在做项目时,经常把功能拆成很小的组件。比如一个“旋转组件”只负责旋转,一个“颜色变化组件”只负责变色。然后组合到不同的 GameObject 上。这样复用性极高,调试也方便。
4.7 小练习:自己动手
学完这一课,我建议你做下面几件事:
- 创建一个 Sphere(球体),给它加 Rigidbody,看看它怎么滚
- 创建一个空 GameObject,改名叫 “SpawnPoint”,作为标记点
- 试着删除 Cube 的 Box Collider,看看它会不会穿过平面
- 给 Cube 加一个 Audio Source,随便拖一个音频文件进去,播放时听听效果
核心总结:
- GameObject 是容器,Component 是功能
- 一个 GameObject 可以挂多个 Component
- 组件可以随时添加、删除、修改
- 组合组件,就能创造出千变万化的游戏对象
下一节课,我们会深入讲 Transform 组件——它是所有 GameObject 的“骨架”。到时候我会分享一些我在项目中用 Transform 做的小技巧,比如如何让物体平滑移动、如何做父子级绑定。咱们下节课见。