Skip to content

在 SandMod 编辑器中 变换(Transform) 游戏对象(Game Object)是指对其进行移动、旋转或缩放(也就是,调整 游戏对象 的位置、方向和大小)。本章节描述了如何执行这些操作,以及一些常用的 游戏对象 变换操作快捷键。

手动变换

您可以通过 检视窗口(Inspector)的 变换(Transform)组件(Component)进行手动变换。当您在 场景预览窗口(Scene)中选择一个或多个 游戏对象(Game Object)时,可在此组件内查看和编辑它们的 位置信息(Location)、旋转信息(Rotation) 和 缩放(Scale)。值得注意的是,任何子级游戏对象的变换值都是相对于父级游戏对象的变换值显示的,这些值称为 局部坐标(Local Coordinates)。

【SceneEditor_Transforming_GameObject001.png】

游戏对象 在 检视窗口(Inspector)的 变换(Transform)组件(Component)中,会显示游戏对象的 位置信息(Position)、旋转信息(Rotation) 和 缩放(Scale)的数值。

每个 变换(Transform) 属性都提供了分别对应 X、Y 和 Z 轴的数值框。您可以直接在这些数值框中输入特定值来调整选定的 游戏对象 ,或者在数值框内长按鼠标左键并左右拖动鼠标来调整该字段的数值。

【SceneEditor_Transforming_GameObject002.gif】

值得注意的是,变换(Transform)默认属性值是 相对(relative) 空间坐标,这意味着变换的值是相对于游戏对象父节点的。

多选手动变换

如果选择了多个游戏对象 ,并且它们的位置信息(Location)或 旋转信息(Rotation)或 缩放(Scale)不一致,则相关数值框将显示 " - "。在这种情况下,您输入的数值将覆盖所有选定游戏对象的对应值。请注意,这可能会导致游戏对象重叠。

【SceneEditor_Transforming_GameObject003.png】

选择多个游戏对象后,一个或多个 变换(Transform)的属性可以有多个数值,如本例所示。

重置默认值

要在更改后将游戏对象的 位置信息(Location)、旋转信息(Rotation) 和 缩放(Scale)重置为其默认值,请单击 back2.png 指示器。

【SceneEditor_Transforming_GameObject004.png】

同步锁

如果需要让游戏对象等比缩放,您可以启动游戏对象 缩放(Scale)属性上的同步锁切换按钮 。

【SceneEditor_Transforming_GameObject004_1.png】

Locked.png 启用同步锁,调整 缩放(Scale)属性上 X、Y 或 Z 数值框上的值,其他两个数值框的值会根据被更改的值在更改后的值较更改前的比例自动等比修改。

--------------
例如,游戏对象的 缩放(Scale)属性中 X、Y 和 Z 数值为 (1, 2, 4)。
【SceneEditor_Transforming_GameObject004_2.png】

将 X 值设置为 2 后,Y 和 Z 值自动更改为 4 和 8。
【SceneEditor_Transforming_GameObject004_3.gif】
--------------

Unlock.png 取消同步锁,缩放(Scale)属性上 X、Y 或 Z 数值框上的值互相独立,不会相互影响。

交互式变换

您可以使用交互式辅助图标类型的 小工具(Gizmo)在 场景预览窗口(Scene)内进行可视化变换(移动、旋转、缩放)游戏对象(Game Object)。

这类交互式辅助图标类型的 小工具(Gizmo️)通常由几个部分组成,根据其作用的轴用不同颜色进行区分:

  • 红色代表 X 轴。
  • 绿色代表 Y 轴。
  • 蓝色代表 Z 轴。

【SceneEditor_Scene006.png】

如图所示 立方体(Cube)绿色的描边、红绿蓝三色箭头,光照 游戏对象 的标志都是 小工具(Gizmo)。

小工具(Gizmo)虽然使用起来更直观,但不如手动输入坐标精确。使用 小工具(Gizmo)时可使用 栅格对齐(Grid Snapping) 进行精确定位。 更多相关信息,请参阅 游戏对象对齐 章节。

根据正在执行的变换类型(移动、旋转或缩放),会采用不同的 小工具(Gizmo)。您可以在 场景预览窗口(Scene)工具栏中选择对应的转换 小工具(Gizmo),或使用键盘快捷切换。

【SceneEditor_Transforming_GameObject005.png】

转换(Transform)相关的 小工具(Gizmo)可在 场景预览窗口(Scene)工具栏上切换。从左到右为:移动工具(Move Tool)、旋转工具(Rotate Tool)、缩放工具(Scale Tool)和矩形工具(Rect Tool)的快捷方式。点击查看大图。

移动工具

移动工具(Move Tool)由一组三个不同颜色的箭头组成,指向 世界(World)或 本地(Local)中每个轴的正方向。可用于沿轴、平面移动 游戏对象(Game Object)。

【SceneEditor_Transforming_GameObject006.png】

单击箭头并拖动箭头以沿该轴移动选定的 游戏对象(Game Object)。

【SceneEditor_Transforming_GameObject007.gif】

要同时沿两个轴移动 游戏对象(Game Object),请单击两个轴相交点处的正方形,然后拖动,即可沿两个轴(XY、XZ或YZ)定义的平面移动 游戏对象(Game Object)。

【SceneEditor_Transforming_GameObject008.gif】

旋转工具

旋转工具(Rotate Tool)由一组三个不同颜色的圆圈组成,每个圆圈与一个轴相关联。

【SceneEditor_Transforming_GameObject009.png】

当您拖动其中一个圆圈时,选定的 游戏对象(Game Object)将围绕该轴旋转。对于这个 小工具(Gizmo),任一圆圈所影响的轴是垂直于圆圈的轴。例如,在 XY 平面上的圆圈使 游戏对象(Game Object)围绕 Z 轴旋转。

【SceneEditor_Transforming_GameObject010.gif】

当您用鼠标点击特定圆圈时,该圆圈会变为黄色,表示您可以拖动它来旋转 游戏对象。当您开始旋转游戏对象时,小工具(Gizmo)会改变形状,仅显示 游戏对象 的旋转轴。旋转角度的数值也会实时显示,以帮助您把控进度。

缩放工具

缩放工具(Scale Tool)带有三个不同颜色且末端为立方体的手柄。

【SceneEditor_Transforming_GameObject011.png】

当您通过其中一个手柄拖动 小工具(Gizmo)时,可沿关联的轴缩放选定的 游戏对象(Game Object)。

【SceneEditor_Transforming_GameObject012.gif】

您还可以沿三个轴同时缩放游戏对象,让其进行等比例缩放。如果将鼠标点击在三个轴相交的白色立方体上,三个手柄都变为黄色。拖动该中心立方体即可按比例缩放 游戏对象。

【SceneEditor_Transforming_GameObject013.gif】

矩形工具

矩形工具(Rect Tool)和其他 变换(Transform)相关的 小工具(Gizmo)在构成上有所差别,它是由四个顶点、四条边、一个中心控制点组成。通常用于编辑 2D 的对象,如 精灵(Sprite)和 UI 对象,但也可用于操作 3D 游戏对象(Game Object)。此工具将移动、缩放功能整合到了同一个 小工具(Gizmo)中。

矩形工具作用于哪个平面,取决于当前 场景预览窗口(Scene)的预览摄像机面向哪个两轴相交的平面。您可以通过移动预览摄像机改变矩形工具影响的平面,进而改变矩形工具 变换 的属性。

【SceneEditor_Transforming_GameObject014.gif】

拖动 小工具(Gizmo)的中心控制点,可同时沿着在该平面的两个轴移动游戏对象。

【SceneEditor_Transforming_GameObject015.gif】

拖动 小工具(Gizmo)的任一条边,可以在保持对边位置不变的情况下,沿一个轴单向缩放 游戏对象。同时修改游戏对象的 位置信息(Location) 和 缩放(Scale)一条轴上的属性值。

【SceneEditor_Transforming_GameObject016.gif】

拖拽 小工具(Gizmo)的任一顶点,可以在保持对角顶点位置不变的情况下,在两个轴上缩放游戏对象。同时修改游戏对象的 位置信息(Location) 和 缩放(Scale)两条轴上的属性值。

【SceneEditor_Transforming_GameObject017.gif】

世界和本地变换模式

使用交互式变换方法时,您可以选择执行变换时所使用的参考坐标系。您可以按以下参考坐标系变换 游戏对象(Game Object):

【SceneEditor_Transforming_GameObject018.png】世界坐标(World),也就是沿世界轴。

【SceneEditor_Transforming_GameObject019.png】本地坐标(Local),游戏对象本地的参考坐标系,也就是沿其局部轴。

下面的示例使用立方体 游戏对象 显示了世界空间和局部空间之间的差异。

世界坐标(World):平移工具的 X Y Z 轴与世界的 X Y Z 轴相同。沿 Y 轴拖动可相对于地面上下移动立方体。

【SceneEditor_Transforming_GameObject020.gif】
本地坐标(Local):平移工具的 X Y Z 轴使用立方体的本地坐标。沿 Y 轴拖动也会上下移动立方体,但会倾斜向立方体旋转的角度。
【SceneEditor_Transforming_GameObject021.gif】

默认情况下, SandMod 编辑器的启动模式为世界坐标变换模式。要切换到本地坐标变换模式,请单击 场景预览窗口(Scene)工具栏中的 坐标切换(World/Local) 图标进行切换。

【SceneEditor_Transforming_GameObject022.png】

脚本运行时变换

您可以在脚本中通过 GameObject.transform API 调用 变换(Transform)组件(Component)在游戏项目运行时动态变换 游戏对象(Game Object),详情请参阅 API 文档 Transform 的相关内容。

例如您需要设置当前游戏对象相对于其父级游戏对象高 2 个单位、沿 X 轴旋转 45 度、Z 轴 2 倍缩放,将此游戏对象动态变换的代码示例如下:

typescript
class DynamicTransformation extends Component {

    OnStart(): void {
        //设置此游戏对象的相对位置
        this.transform.localPosition = new Vector3(0,2,0);

        //由于 旋转(Rotation)变换需要以四元数的方式书写,案例中是以欧拉角的方式举例,因此需要将该欧拉角转换为四元数。
        let eulerRotation:Vector3 = new Vector3(45,0,0);
        //设置此游戏对象的相对旋转
        this.transform.localRotation = Quaternion.FromEuler(eulerRotation);
        
        //设置此游戏对象的相对缩放
        this.transform.localScale = new Vector3(1,1,2);
    }

    OnUpdate(): void {
    }

}

调整变换中心位置

变换 游戏对象(Game Object)时,您通常会从 游戏对象 的基础枢轴点执行变换。

而执行变换(移动、旋转、缩放)的位置就是变换的中心点,如果您启用了变换相关的 小工具(Gizmo),则会在该 小工具(Gizmo)的三个轴相交处看到变换的中心点。

您可以调整游戏对象变换的中心点是在 枢轴(Pivot)还是在游戏对象的 中心(Center):

【SceneEditor_Transforming_GameObject023.png】枢轴(Pivot),将变换相关的 小工具(Gizmo)定位在游戏对象的实际轴心点,即 变换(Transform)组件(Component)显示的位置。 若同时选择多个游戏对象,则显示在最后一个选中的游戏对象的枢轴上。

【SceneEditor_Transforming_GameObject024.png】中心(Center),变换相关的 小工具(Gizmo)根据所选游戏对象定位在中心位置。若同时选择多个游戏对象,则显示在所有游戏对象的中心位置。

NOTE

对于有 网格渲染器(Mesh Renderer)组件(Component)的游戏对象,其枢轴点是由模型本身决定的,其枢轴点定义模型绕其旋转和缩放的位置。

其他变换快捷键

以下是变换(移动、旋转、缩放)游戏对象(Game Object)时的一些常用键盘快捷方式。

功能按钮调用工具或操作
W选择移动工具。
E选择旋转工具。
R选择缩放工具。
T选择矩形工具。
C地面对齐工具。
H(选中 游戏对象 时)隐藏选中的 游戏对象。
J (选中 游戏对象 时)锁定选中的 游戏对象。
Z切换参考坐标系为世界坐标还是本地坐标。
X切换变换 小工具(Gizmo)的中心位置是枢轴还是中心。