3、场景搭建基础:GameObject的概念、Transform组件详解、在场景中创建和移动物体、使用坐标系统
好,咱们正式开始动手搭建场景了。
说实话,很多新手一上来就急着拖模型、摆位置,结果做到一半发现物体对不齐,或者根本不知道物体在三维空间里到底在哪。我当年也犯过这个错——在场景里瞎拖了半天,最后连摄像机都找不到了。嗯,这节课咱们就把地基打牢。
3.1 什么是GameObject?
简单说,GameObject(游戏对象)就是场景里的一切。一个角色、一盏灯、一个空的位置,甚至一个看不见的逻辑触发器,都是GameObject。
你可以把它想象成一个空盒子。盒子本身啥也没有,但你往里面塞东西——比如网格、碰撞体、脚本——它就变成了具体的物体。我习惯把GameObject叫做“容器”,它承载了所有能让物体“活起来”的组件。
核心概念:GameObject本身只是一个空壳,真正起作用的是挂载在它上面的组件(Component)。
3.2 Transform组件——物体的身份证
每个GameObject都自带一个Transform组件。你删不掉它,也加不了第二个。为什么?因为一个物体在三维空间里必须有位置、旋转和缩放,这是最基本的属性。
Transform组件包含三个核心属性:
- Position(位置):物体在三维空间里的坐标 (X, Y, Z)
- Rotation(旋转):物体绕各轴旋转的角度 (X, Y, Z)
- Scale(缩放):物体在各轴上的大小比例 (X, Y, Z)
我在项目里遇到过最坑的事:一个美术同事把某个模型的Scale调成了(100, 1, 100),结果碰撞体变得巨大无比,角色一靠近就被弹飞。排查了半天才发现是缩放出了问题。所以,没事别乱改Scale,除非你清楚自己在做什么。
3.3 坐标系统——三维空间的“东南西北”
Unity使用的是左手坐标系。什么意思?
- X轴:向右为正
- Y轴:向上为正
- Z轴:向前为正(朝向屏幕里)
你想想看,如果你站在原点(0,0,0),面朝Z轴正方向,那么你的右手边就是X正方向,头顶就是Y正方向。这个坐标系在3D游戏里是通用的,但不同引擎可能不一样——比如某些软件用的是右手系。我刚从Maya转到Unity时,就被这个搞晕过好几次。
小技巧:在Scene视图中,你可以把鼠标悬停在坐标轴 gizmo(那个红绿蓝的小箭头)上,按一下对应的轴,就能快速切换视角。红色是X,绿色是Y,蓝色是Z。记不住?我一般记“红绿蓝 = RGB = XYZ”。
3.4 在场景中创建和移动物体
创建物体很简单:右键 → 3D Object → 选一个基本体(Cube、Sphere、Capsule等)。或者直接把模型从Project面板拖到Scene里。
移动物体有三种常用方式:
- 直接拖拽:选中物体,按W键切换到移动工具,拖拽箭头或平面手柄。
- 精确输入:在Inspector面板的Transform里直接输入数值。
- 代码控制:通过脚本修改transform.position。
我个人最常用的是第二种。尤其是做关卡设计时,我需要让两个物体完美对齐,直接拖拽很难做到。这时候我会把位置数值精确到小数点后两位,比如让一个地板放在(0, 0, 0),另一个放在(0, 0, 10),中间留出10个单位的间距。
注意:直接拖拽时,按住 Ctrl(Windows)或 Cmd(Mac)可以启用网格吸附。默认网格大小是1个单位,你可以在菜单栏 Edit → Snap Settings 里调整。我曾经因为没开吸附,摆了一排柱子结果间距全不一样,最后只能删了重来。
3.5 世界坐标 vs 局部坐标
这是新手最容易混淆的地方。
- 世界坐标:以场景原点(0,0,0)为基准,所有物体都共用这个坐标系。
- 局部坐标:以物体自身的Transform为基准,子物体相对于父物体的位置。
举个例子:你有一个角色(父物体),手里拿了一把剑(子物体)。剑的局部坐标是(0, 0, 1),意思是剑在角色前方1个单位。当你移动角色时,剑跟着动,但剑相对于角色的位置不变。这就是局部坐标的妙处。
在Inspector里,Transform显示的是局部坐标。如果你想看世界坐标,可以在脚本里用 transform.position 获取。嗯,这里要注意:transform.localPosition 和 transform.position 是两个不同的东西,别搞混了。
3.6 父子关系与层级结构
把物体A拖到物体B上,A就变成了B的子物体。子物体会继承父物体的位置、旋转和缩放。这个机制在搭建复杂场景时非常有用。
我习惯把场景里的物体按逻辑分组:
- 一个空GameObject叫“Environment”,下面放所有地形、建筑
- 一个空GameObject叫“Characters”,下面放所有角色
- 一个空GameObject叫“Lights”,下面放所有灯光
这样做的好处是:你可以整体移动或隐藏一组物体,调试起来特别方便。我曾经接手过一个项目,场景里几百个物体全平铺在根目录下,找一盏灯找了十分钟……从那以后,我每个项目都强制自己做好层级管理。
3.7 实战小练习:搭建一个简单的场景
咱们来动手试试。跟着我做:
- 创建一个Cube,位置设为(0, 0.5, 0),Scale设为(10, 1, 10)——这就是地面。
- 创建一个Capsule,位置设为(0, 1, 0)——这就是一个简单的人物。
- 创建一个Sphere,位置设为(2, 1, 2)——这可以当作一个道具。
- 把Sphere拖到Capsule下面,让Sphere成为Capsule的子物体。
- 移动Capsule,观察Sphere是否跟着动。
你试试看。如果一切正常,你就已经掌握了GameObject、Transform和坐标系统的基础操作。
总结一下:
- GameObject是容器,组件赋予它功能
- Transform是每个物体必备的“位置身份证”
- 左手坐标系:X右、Y上、Z前
- 世界坐标 vs 局部坐标,搞清父子关系
- 养成层级管理的好习惯,别让场景变成垃圾堆
下一章咱们会聊材质和贴图,让这些灰不溜秋的Cube和Sphere变得好看一点。到时候见。