初面网初面网

坐标系

这章主要介绍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

// 获取物体在屏幕坐标系中的位置
Vector3 screenPos = Camera.main.WorldToScreenPoint(transform.position);

// 获取屏幕坐标在物体世界坐标系中的位置
Vector3 worldPos = Camera.main.ScreenToWorldPoint(screenPos);
  • 世界坐标与视口坐标的转换 视口转世界,Camera.ViewportToWorldPoint 世界转视口,Camera.WorldToViewportPoint
// 获取物体在视口坐标系中的位置
Vector3 viewportPos = Camera.main.WorldToViewportPoint(transform.position);

// 获取视口坐标在物体世界坐标系中的位置
Vector3 worldPos = Camera.main.ViewportToWorldPoint(viewportPos);
  • 屏幕坐标与视口坐标的转换

屏幕转视口,Camera.ScreenToViewportPoint 视口转屏幕,Camera.ViewportToScreenPoint

// 获取物体在视口坐标系中的位置
Vector3 viewportPos = Camera.main.ScreenToViewportPoint(screenPos);

// 获取视口坐标在物体屏幕坐标系中的位置
Vector3 screenPos = Camera.main.ViewportToScreenPoint(viewportPos);
  • 世界坐标与局部坐标的转换

局部转世界,transform.TransformPoint 世界转局部,transform.InverseTransformPoint

// 获取物体在局部坐标系中的位置
Vector3 localPos = transform.InverseTransformPoint(transform.position);

// 获取局部坐标在物体世界坐标系中的位置
Vector3 worldPos = transform.TransformPoint(localPos);

更新于 2025/2/26