1、世界坐标
transform.position,以世界原点为坐标原点建立的三维坐标系,凡是在Unity的游戏对象均有自己的世界坐标系,且获取坐标的方法很简单,这类似与现实世界我们常说的经纬度,常用来做定义位置,方向的标准。
2、本地坐标(自身坐标)
transform.localposition,以自身为原点而建立的三维坐标系,该坐标为局部坐标,与世界坐标系一样,凡是Unity的游戏对象均有自己的自身坐标,获取坐标的方法也很简单,常用来用于定义自身方向,初始局部位置来用,例如背包当更换物品是其实实在更换UI,而更换UI实则更换UI父对象,然后让transform.localposition=Vector3.zero让他等于其父对象的位置。
3.屏幕坐标
以屏幕左下角为原点建立的一个二维坐标系.以屏幕的左下角为(0,0),右上角为(Screen.width,Screen.height),这个坐标坑最多,也是我们经常最绕的一个坐标,这里就详解下,首先屏幕要知道是相对屏幕。举个例子,现实的投影仪大家很清楚,我们在天花板顶上放一个投影仪,然后投影的影像映射到墙面上或幕布上,这墙面或幕布的影像区域就是屏幕,当我们移动幕布的时候,屏幕的大小也在变化,这就跟我们幕布到投影仪的垂直距离有关,这个垂直距离就是我们的Z轴,后面的屏幕坐标转世界坐标会讲到。值得注意的一点屏幕的坐标跟分辨率的关系,当我们的分辨率是600*800的时候,但我们截取其中的200*200作为屏幕的话,那么屏幕的左下角坐标为(0,0),屏幕右上角坐标为(200,200)。屏幕坐标常用于鼠标交互,而获取的鼠标坐标就属于屏幕坐标(input.mouseposition)。手指触摸屏幕也为屏幕坐标,Input.GetTouch(0).position 可以获得单个手指触摸屏幕时手指的坐标。
4.视口坐标
以相机屏幕左下角为原点建立的一个二维坐标系,左下角为(0,0),右上角为(1,1),它的Z轴即是摄像机的Z轴,上面的示例中投影仪屏幕上建立的坐标就是视口坐标,这个坐标大多用来过渡转化坐标作用,例如世界坐标转屏幕坐标,世界坐标转视口坐标,视口坐标转屏幕坐标。
坐标系之间的关联与相互转换
1.全局坐标系和局部坐标系
关联:
transform.Translate(translation:Vector3, relativeTo: Space = Space.Self);
沿着translation的方向移动|translation|的距离,其结果将应用到relativeTo坐标系中。如果relativeTo为空,则默认为局部坐标系。
转换:
transform.TransformPoint(Vector3 position) :将一个坐标点从局部坐标系转换到全局坐标系。
transform.InverseTransformPoint(Vector3 position):将坐标点从全局坐标系转换到局部坐标系。
其他:
transform.TransformDirection(Vector3 direction):将一个方向从局部坐标系转换到全局坐标系。
transform.InverseTransformDirection(Vector3 direction):将一个方向从全局坐标系转换到局部坐标系。
transform.TransformVector(Vector3 vector):将一个向量从局部坐标系转换到全局坐标系。
transform.InverseTransformVector(Vector3 vector):将一个向量从全局坐标系转换到局部坐标系。