6. Unity 里的一切都是物体
站进了第一个世界之后,问号通常已经一堆:Spawn 到底是什么?Hierarchy 里那几行又是什么?Inspector 里的参数在控制什么?
这一章把这些问题一次理清。核心只有一件事:Unity 是怎么组织三维空间的。
一个小实验:让地板消失
Section titled “一个小实验:让地板消失”打开第一部建好的世界项目。Hierarchy 里点选 Floor,去右侧 Inspector,找到 Mesh Renderer 组件,把它名字前面的小勾取消掉。
Scene 视图里地板没了。但 Hierarchy 里 Floor 还在,按 Build & Test 进去,玩家照样站得住,只是脚下空空。
把小勾打回去,地板又出现。
这就奇怪了:取消一个勾就能让地板隐形,物理碰撞却保留下来,到底是怎么回事?
GameObject 只是一个空壳
Section titled “GameObject 只是一个空壳”这个实验指出 Unity 的核心规则:GameObject(游戏物体)本身没有任何能力。它只是一个空壳。
往这个壳子里放什么组件,它就变成什么东西。
拿 Floor 来说,它能被看见、能被踩、能被定位,是因为身上挂了三个 Component(组件):
Mesh Filter:赋予它几何形状(「我是一个扁平的方块」)。Mesh Renderer:把它画出来(「让别人看见我」)。Box Collider:赋予它物理实体(「让玩家站在我上面」)。
刚才把 Mesh Renderer 关掉,等于告诉 Unity 不用画它了。但 Box Collider 还在,所以玩家照样踩得住。
观察任何物体,先看它挂了什么组件,别只看名字。名字只是给人看的标签,能力来自组件。
三块面板的分工
Section titled “三块面板的分工”日常做事时,视线会在这三块面板之间跳:
- Scene:一个
.unity文件,里面摆着物体和灯光。 - Hierarchy:当前场景里所有 GameObject 的目录清单。
- Inspector:点 Hierarchy 里某个物体,这里展示它身上的所有组件和参数。
排查问题的标准动作:在 Hierarchy 找到目标物体,去 Inspector 看它挂了什么组件、填了什么数值。
Transform:每个物体的标配
Section titled “Transform:每个物体的标配”每个 GameObject 一出生就自带 Transform,删不掉。它只管三件事:在哪(Position)、朝哪(Rotation)、多大(Scale)。
把 Cube 的 Scale Y 改成 0.2,它就成了扁平地板;把 Spawn 的 Rotation Y 改成 180,玩家出生朝向就反了。后面绝大部分基础搭建,就是找对物体、改对 Transform。
父子层级:让一组物体一起动
Section titled “父子层级:让一组物体一起动”在 Hierarchy 里,把一个物体拖到另一个物体下面,它就变成了对方的子物体。
以后做一扇门(门框 + 门板 + 把手),不用层级要逐个零件搬。用了层级:建一个空物体 Door 当父级,零件拖进去:
Door├─ DoorFrame├─ DoorPanel└─ Handle移动 Door,底下三件零件跟着走。「一堆零散几何体」就成了「一个完整物件」,Hierarchy 也因此保持清晰。
空物体:看不见但很有用
Section titled “空物体:看不见但很有用”空物体(Empty GameObject)不挂渲染组件,画面里看不见。但它在项目里用处很大。
Spawn 就是个空物体,没有外观,只用 Transform 标记一个位置和朝向。
空物体在场景里常见的几种活法:当一组零散模型的父级容器;当一扇门旋转时的轴心点;挂脚本和触发区域用的逻辑挂载点。看不见,但骨架靠它撑着。
现在开始改名
Section titled “现在开始改名”项目刚起步时,Hierarchy 一周后通常长这样:
CubeCube (1)Cube (2)GameObjectGameObject (1)五个物体还行,上百个时根本分不清哪个 Cube (14) 是地板、哪个是灯座。
随手改个名字:地板叫 Floor,出生点叫 Spawn,灯光开关叫 Button_LightSwitch。名字乱起不会报错,但两周后自己都分不清东西在哪,改一处要翻半天。
自己加两面墙
Section titled “自己加两面墙”打开项目,动手做一遍:
- 选中
Floor,Ctrl+D复制一份,改名Wall_Left。 - 在 Transform 里改数值,让它竖起来贴在地板左边缘。
- 再
Ctrl+D一份当Wall_Right,平移到右边缘。 - Hierarchy 空白处右键
Create Empty,命名Room。 - 把
Floor、Wall_Left、Wall_Right全拖进Room下面。 - 拖动
Room,看三块板是不是一起动。
做完之后:拖一下 Room,三块板一起走。这就是层级的意义。