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