Appearance
坐标系
这章主要介绍Unity中的坐标系。
坐标系概览
坐标系简单来说分为:世界坐标系、局部(本地)坐标系、屏幕坐标系、视口坐标系、GUI坐标系。
- 世界坐标系
世界坐标系是Unity中所有物体的默认坐标系,它是一个三维坐标系,以场景的中心为原点,X轴正向指向右,Y轴正向指向上,Z轴正向指向屏幕外。
- 局部(本地)坐标系
局部坐标系是相对于父物体而言的,每个物体都有自己独立的局部坐标系。局部坐标系的X轴、Y轴、Z轴分别与父物体的X轴、Y轴、Z轴平行。在局部坐标系中,物体的位置、旋转和缩放都是相对于父物体而言的。
使用transform.position获取
- 屏幕坐标系
屏幕坐标系是二维坐标系,以屏幕的左下角为原点,X轴正向指向右,Y轴正向指向上。在屏幕坐标系中,物体的位置是以像素为单位的。
使用transform.localPosition获取
- 视口坐标系
视口坐标系是二维坐标系,以视口的左下角为原点,X轴正向指向右,Y轴正向指向上。在视口坐标系中,物体的位置是以视口的宽度和高度为单位的。
注意:视口坐标系中的坐标值需要在0到1之间,表示物体在视口中的位置。
使用Screen.width获取宽度,使用Screen.height获取高度
- GUI坐标系
GUI坐标系是二维坐标系,以画布的左上角为原点,X轴正向指向右,Y轴正向指向上。在GUI坐标系中,物体的位置是以像素为单位的。
坐标系的转换
- 世界坐标与屏幕坐标的转换
屏幕转世界,Camera.ScreenToWorldPoint 世界转屏幕,Camera.WorldToScreenPoint
csharp
// 获取物体在屏幕坐标系中的位置
Vector3 screenPos = Camera.main.WorldToScreenPoint(transform.position);
// 获取屏幕坐标在物体世界坐标系中的位置
Vector3 worldPos = Camera.main.ScreenToWorldPoint(screenPos);
- 世界坐标与视口坐标的转换 视口转世界,Camera.ViewportToWorldPoint 世界转视口,Camera.WorldToViewportPoint
csharp
// 获取物体在视口坐标系中的位置
Vector3 viewportPos = Camera.main.WorldToViewportPoint(transform.position);
// 获取视口坐标在物体世界坐标系中的位置
Vector3 worldPos = Camera.main.ViewportToWorldPoint(viewportPos);
- 屏幕坐标与视口坐标的转换
屏幕转视口,Camera.ScreenToViewportPoint 视口转屏幕,Camera.ViewportToScreenPoint
csharp
// 获取物体在视口坐标系中的位置
Vector3 viewportPos = Camera.main.ScreenToViewportPoint(screenPos);
// 获取视口坐标在物体屏幕坐标系中的位置
Vector3 screenPos = Camera.main.ViewportToScreenPoint(viewportPos);
- 世界坐标与局部坐标的转换
局部转世界,transform.TransformPoint 世界转局部,transform.InverseTransformPoint
csharp
// 获取物体在局部坐标系中的位置
Vector3 localPos = transform.InverseTransformPoint(transform.position);
// 获取局部坐标在物体世界坐标系中的位置
Vector3 worldPos = transform.TransformPoint(localPos);