Unity 中,主要有几种坐标关系,每种坐标系统的使用场景和功能不同。以下是 Unity 中常见的坐标关系:

在 Unity 中,主要有几种坐标关系,每种坐标系统的使用场景和功能不同。以下是 Unity 中常见的坐标关系:

1. 世界坐标(World Space)

  • 世界坐标是相对于场景的原点(0, 0, 0)来表示对象的位置。
  • 每个对象都有一个全球唯一的位置、旋转和缩放。
  • 无论对象如何移动或旋转,世界坐标始终是固定的,不会受父对象的影响。
  • 使用 Transform.position 来获取或设置对象在世界空间中的位置。

示例: 如果某个对象在世界空间中有一个位置 (10, 5, 0),它就在世界原点的右边 10 单位、上方 5 单位的位置。

2. 局部坐标(Local Space)

  • 局部坐标是相对于对象的父对象的坐标系来表示位置、旋转和缩放。
  • 对象的局部坐标会随着父对象的位置、旋转和缩放的变化而改变。
  • 使用 Transform.localPosition 来获取或设置对象在父坐标系中的位置。

示例: 如果一个对象的父对象位于 (10, 5, 0),且该对象在父坐标系中的位置为 (2, 0, 0),那么它在世界坐标中的位置将是 (12, 5, 0)

3. 屏幕坐标(Screen Space)

  • 屏幕坐标是相对于屏幕的像素坐标系,原点通常在屏幕的左下角,x 轴向右,y 轴向上。
  • 该坐标系常用于 UI 元素的位置计算。
  • 可以使用 Camera.WorldToScreenPoint 来将世界坐标转换为屏幕坐标。
  • 屏幕坐标的单位通常是像素,而不是世界空间中的单位。

示例: 如果某个物体位于 (10, 5, 0),你可以使用 Camera.WorldToScreenPoint 将它转换为 (960, 540)(假设这是屏幕中间的位置)。

4. 视口坐标(Viewport Space)

  • 视口坐标是相对于摄像机视口的坐标系,原点在视口的左下角,范围从 (0, 0) 到 (1, 1)。
  • 视口坐标用于表示屏幕上物体的位置相对于摄像机的视野。常用于 UI 元素的定位。
  • 可以使用 Camera.WorldToViewportPoint 将世界坐标转换为视口坐标。

示例: 视口坐标 (0, 0) 表示屏幕的左下角,(1, 1) 表示屏幕的右上角。

5. 相机空间(Camera Space)

  • 相机空间是相对于摄像机的局部坐标系。物体的坐标是相对于摄像机视野的位置。
  • 在这个坐标系中,物体的位置将基于它与摄像机的关系进行描述。
  • 使用 Camera.WorldToCameraPoint 可以将世界坐标转换为相机坐标。

示例: 如果一个物体位于摄像机的前方,它的 z 坐标是正的,而如果在摄像机后方,则 z 坐标是负的。

6. 父坐标系(Parent Space)

  • 这是指对象在其父物体坐标系中的坐标。与局部坐标类似,但父对象的坐标系统有可能与世界坐标系发生旋转或缩放。
  • Unity 会根据父对象的 Transform 来计算子对象的坐标。

总结:

  • 世界坐标(World Space):全局坐标系。
  • 局部坐标(Local Space):相对于父物体的坐标系。
  • 屏幕坐标(Screen Space):以屏幕为基础的坐标系,单位为像素。
  • 视口坐标(Viewport Space):相对于摄像机视野的坐标系,范围为 [0, 1]。
  • 相机空间(Camera Space):以相机为参考的坐标系,通常用于3D空间计算。
  • 父坐标系(Parent Space):相对于父物体的坐标系。

理解这些坐标系的区别和转换方式对于开发 3D 游戏、UI 布局以及与摄像机的交互非常重要。

备案号: 湘ICP备2021015274号-3