最近接触了一下 Unity 3D 引擎。 发现坐标系这种东西貌似很容易忘记,先记一下。

简单说来, U3D 中主要有World 坐标系Screen 坐标系Viewport 坐标系GUI 坐标系。 其实这些名字不一定准确,只是为了方便说明。

World 坐标系,就是在编辑器 Inspector 中指示的 Transform 所使用的坐标系。 绑定在游戏对象上的脚本,通过 transform.position 或者 gameObject.transform.position 获取的都是这个坐标系下的坐标。

Screen 坐标系是以游戏窗口左下角为(0, 0),右上角为(Screen.width, Screen.height)的坐标系,z轴与相机位置有关系。 通过Input对象获取到的鼠标位置和触摸位置都是这个坐标系下的坐标。

Viewport 坐标系是以相机视口的左下角为(0, 0),右上角为(1, 1)的坐标系。

GUI 坐标系是引擎实际绘图使用的坐标系,跟其他图形编程手段(PygameHTML5 Canvas等)中的标准坐标系一样,是以绘图区域左上角为(0, 0)、右下角为(Screen.width, Screen.height)的坐标系。 这个坐标系貌似一般接触不到。

如果对这些坐标系还有困惑,看看这两篇文章。