Cocos Creator:坐标系和节点变换属性

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT 编辑器
坐标系和节点变换属性
在文档、场景面板和节点和组件中,介绍了通过使用变换工具 Gizmo 和在检查器面板中编辑节点属性来更改节点显示行为的功能。本文档将更深入地了解节点所在场景空间的坐标系以及节点的位置、旋转和缩放转换属性的工作原理。
坐标系
可以设置节点的位置属性,但是在游戏运行时,具有特定位置属性的节点将在屏幕上呈现在哪里?正如经度和纬度指定行星上某个位置的坐标一样,有必要了解 Cocos Creator 3.x 的坐标系才能理解节点位置的含义。
世界坐标
世界坐标系,又称绝对坐标系,表示《宇宙寻梦者》游戏开发中场景空间中的统一坐标系,“世界”用来表示我们的游戏场景。
Creator 3.x 的世界坐标系使用笛卡尔右手坐标系,默认 x 在右边,y 在顶部,z 在外面,-z 轴在前面。

局部坐标
局部坐标系(也称为相对坐标系)是与节点关联的坐标系。每个节点都有一个单独的坐标系,当节点移动或改变方向时,与该节点关联的坐标系将随之移动或改变方向。
Creator 具有节点之间的父子关系层次结构,通过修改其属性设置的节点的位置是节点相对于其父节点的局部坐标系,而不是世界坐标系。Position
最后,在绘制整个场景时,Creator 会将这些节点的局部坐标映射到世界坐标系坐标。
假设场景中有三个节点:节点 A、节点 B 和节点 C。节点的结构如下图所示。

当场景包含不同级别的节点时,根据以下步骤确定世界坐标系下每个节点的位置:
- 从根级别开始处理每个节点,上图中的 NodeA 是根级别节点。第一步是根据 NodeA 的位置属性确定 NodeA 的局部坐标系(即)在世界坐标系中的原点位置。
Position
- 接下来,处理 NodeA 的所有直接子节点,即上图中的节点 B(以及与节点 B 级别相同的其他节点)。根据节点 B 的属性,确定节点 B 在节点 A 的局部坐标系中的世界坐标系中的位置。
Position
- 每个节点都使用父节点的坐标系及其自己的位置属性来确定其在世界坐标系中的位置。
转换属性
节点包括三个主要的转换属性:位置、旋转和缩放,下面将依次介绍这些属性。

位置
位置由 和属性组成,它们分别指定节点在当前坐标系的 X 轴、Y 轴和 Z 轴上的坐标,默认为 。XYZ(0, 0, 0)


在上图中,节点 A 的世界坐标为 ,子节点 B 的局部坐标为 。如果将节点 B 移动到场景的根目录,则节点 B 的世界坐标将变为 。(50, 50, 50)(0, 2, 0)(50, 52, 50)

子节点 B 的 基于父节点 A 的 作为坐标系的原点。PositionPosition
如果父节点 A 更改其 ,则子节点 B 也将更改其位置(世界坐标系),但子节点 B 的属性不会更改,因为子节点 B 在以父节点 A 为原点的局部坐标系中不会更改。PositionPositionPosition
在“场景”面板中,使用“移动变换工具”更改节点位置。
旋转
旋转由 和 属性组成,这些属性默认为 ,是影响节点局部坐标系的另一个重要属性。更改属性时,表示节点将绕 x 轴逆时针/顺时针旋转,依此类推,当 or 属性更改时也是如此。XYZ(0, 0, 0)XYZ
- 当属性值为正时,节点将逆时针旋转。
- 当属性值为负时,节点将顺时针旋转。

上面显示的节点层次结构与上图相同,只是 NodeA 在 z 轴上的 Rotate 属性设置为 60 度,请注意,除了 NodeA 本身在 z 轴上逆时针旋转 60 度外,其子节点 B 也以 z 轴为中心。节点 B 也在节点 A 的 z 轴上逆时针旋转。这也意味着旋转属性会影响子节点。
注: 节点上的四元数旋转属性表示围绕任何轴的旋转角度。检查器面板中对应的属性是属性欧拉角,其值可以在脚本中通过 获取。这两个属性可以根据您的需要单独使用。使用 API 时,请务必注意它们与编辑器面板属性名称之间的区别。RotationRotationNode.eulerAngles
在“场景”面板中,使用“旋转变换工具”设置节点的旋转。
规模
Scale 属性还包含 和 属性,它们分别表示节点在 x 轴、y 轴和 z 轴上的缩放,默认为 。XYZ(1, 1, 1)

上面显示的节点层次结构与引入时相同。将 NodeA 的缩放属性设置为 意味着节点 A 在 x 轴方向上缩放到其原始大小的 2 倍,而 y 轴和 z 轴保持不变。您可以看到,子节点 NodeB 在 x 轴方向上也缩放到其原始大小的两倍,因此缩放属性会影响所有子节点。Position(2, 1, 1)
子节点上设置的属性叠加在其父节点的缩放上,子节点的子节点将每个级别的所有属性相乘,得到世界坐标系中显示的缩放乘数。这实际上与位置和旋转属性相同,只是位置和旋转属性是累加的,而缩放属性是乘法的,效果更明显。ScaleScale
Scale 属性不会影响当前节点的位置和旋转,但会影响子节点的位置。
在“场景”面板中,使用“缩放变换工具”修改节点缩放。
3D建模学习工作室整理翻译,转载请标明出处!