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里。

移动物体有三种常用方式:

  1. 直接拖拽:选中物体,按W键切换到移动工具,拖拽箭头或平面手柄。
  2. 精确输入:在Inspector面板的Transform里直接输入数值。
  3. 代码控制:通过脚本修改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.localPositiontransform.position 是两个不同的东西,别搞混了。

3.6 父子关系与层级结构

把物体A拖到物体B上,A就变成了B的子物体。子物体会继承父物体的位置、旋转和缩放。这个机制在搭建复杂场景时非常有用。

我习惯把场景里的物体按逻辑分组:

  • 一个空GameObject叫“Environment”,下面放所有地形、建筑
  • 一个空GameObject叫“Characters”,下面放所有角色
  • 一个空GameObject叫“Lights”,下面放所有灯光

这样做的好处是:你可以整体移动或隐藏一组物体,调试起来特别方便。我曾经接手过一个项目,场景里几百个物体全平铺在根目录下,找一盏灯找了十分钟……从那以后,我每个项目都强制自己做好层级管理。

3.7 实战小练习:搭建一个简单的场景

咱们来动手试试。跟着我做:

  1. 创建一个Cube,位置设为(0, 0.5, 0),Scale设为(10, 1, 10)——这就是地面。
  2. 创建一个Capsule,位置设为(0, 1, 0)——这就是一个简单的人物。
  3. 创建一个Sphere,位置设为(2, 1, 2)——这可以当作一个道具。
  4. 把Sphere拖到Capsule下面,让Sphere成为Capsule的子物体。
  5. 移动Capsule,观察Sphere是否跟着动。

你试试看。如果一切正常,你就已经掌握了GameObject、Transform和坐标系统的基础操作。

总结一下:

  • GameObject是容器,组件赋予它功能
  • Transform是每个物体必备的“位置身份证”
  • 左手坐标系:X右、Y上、Z前
  • 世界坐标 vs 局部坐标,搞清父子关系
  • 养成层级管理的好习惯,别让场景变成垃圾堆

下一章咱们会聊材质和贴图,让这些灰不溜秋的Cube和Sphere变得好看一点。到时候见。