跳转到内容

6. Unity 里的一切都是物体

约 4 分钟

站进了第一个世界之后,问号通常已经一堆:Spawn 到底是什么?Hierarchy 里那几行又是什么?Inspector 里的参数在控制什么?

这一章把这些问题一次理清。核心只有一件事:Unity 是怎么组织三维空间的。

打开第一部建好的世界项目。Hierarchy 里点选 Floor,去右侧 Inspector,找到 Mesh Renderer 组件,把它名字前面的小勾取消掉。

Scene 视图里地板没了。但 Hierarchy 里 Floor 还在,按 Build & Test 进去,玩家照样站得住,只是脚下空空。

把小勾打回去,地板又出现。

这就奇怪了:取消一个勾就能让地板隐形,物理碰撞却保留下来,到底是怎么回事?

这个实验指出 Unity 的核心规则:GameObject(游戏物体)本身没有任何能力。它只是一个空壳。

往这个壳子里放什么组件,它就变成什么东西。

Floor 来说,它能被看见、能被踩、能被定位,是因为身上挂了三个 Component(组件):

  • Mesh Filter:赋予它几何形状(「我是一个扁平的方块」)。
  • Mesh Renderer:把它画出来(「让别人看见我」)。
  • Box Collider:赋予它物理实体(「让玩家站在我上面」)。

刚才把 Mesh Renderer 关掉,等于告诉 Unity 不用画它了。但 Box Collider 还在,所以玩家照样踩得住。

观察任何物体,先看它挂了什么组件,别只看名字。名字只是给人看的标签,能力来自组件。

日常做事时,视线会在这三块面板之间跳:

  • Scene:一个 .unity 文件,里面摆着物体和灯光。
  • Hierarchy:当前场景里所有 GameObject 的目录清单。
  • Inspector:点 Hierarchy 里某个物体,这里展示它身上的所有组件和参数。

排查问题的标准动作:在 Hierarchy 找到目标物体,去 Inspector 看它挂了什么组件、填了什么数值。

每个 GameObject 一出生就自带 Transform,删不掉。它只管三件事:在哪(Position)、朝哪(Rotation)、多大(Scale)。

把 Cube 的 Scale Y 改成 0.2,它就成了扁平地板;把 Spawn 的 Rotation Y 改成 180,玩家出生朝向就反了。后面绝大部分基础搭建,就是找对物体、改对 Transform。

在 Hierarchy 里,把一个物体拖到另一个物体下面,它就变成了对方的子物体。

以后做一扇门(门框 + 门板 + 把手),不用层级要逐个零件搬。用了层级:建一个空物体 Door 当父级,零件拖进去:

Door
├─ DoorFrame
├─ DoorPanel
└─ Handle

移动 Door,底下三件零件跟着走。「一堆零散几何体」就成了「一个完整物件」,Hierarchy 也因此保持清晰。

空物体(Empty GameObject)不挂渲染组件,画面里看不见。但它在项目里用处很大。

Spawn 就是个空物体,没有外观,只用 Transform 标记一个位置和朝向。

空物体在场景里常见的几种活法:当一组零散模型的父级容器;当一扇门旋转时的轴心点;挂脚本和触发区域用的逻辑挂载点。看不见,但骨架靠它撑着。

项目刚起步时,Hierarchy 一周后通常长这样:

Cube
Cube (1)
Cube (2)
GameObject
GameObject (1)

五个物体还行,上百个时根本分不清哪个 Cube (14) 是地板、哪个是灯座。

随手改个名字:地板叫 Floor,出生点叫 Spawn,灯光开关叫 Button_LightSwitch。名字乱起不会报错,但两周后自己都分不清东西在哪,改一处要翻半天。

打开项目,动手做一遍:

  1. 选中 FloorCtrl+D 复制一份,改名 Wall_Left
  2. 在 Transform 里改数值,让它竖起来贴在地板左边缘。
  3. Ctrl+D 一份当 Wall_Right,平移到右边缘。
  4. Hierarchy 空白处右键 Create Empty,命名 Room
  5. FloorWall_LeftWall_Right 全拖进 Room 下面。
  6. 拖动 Room,看三块板是不是一起动。

做完之后:拖一下 Room,三块板一起走。这就是层级的意义。