- A+
今天复习一下unity中的坐标转换,unity坐标有世界坐标系,屏幕坐标系,视口坐标系,还有绘制GUI界面的坐标系。
在网上查找到对于这几种坐标系的解释:
1.世界坐标系
我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。
2.屏幕坐标系
以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。鼠标位置Input.mousePosition获取的是屏幕坐标。
3.视口坐标系
视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。
4.绘制GUI界面的坐标系
这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。
先看看世界坐标系
新建一个场景,创建一个正方体和一个球体
将它们放在不同的位置
都添加脚本CoordinateText.cs
在Start方法输出位置
print( transform.position );
看看结果
跟Transform显示的一样(这时候不存在父子关系)
当我将正方体扔到球体上时,让球体成为正方体的父类
可以看到正方体显示Position属性发生了改变
我们运行一下
发现结果并没有发生改变,证明tranform.position取得的是世界坐标
我们并没有移动它们,结果自然没有发生改变
而Cube有了父级,则它在属性显示中显示的是局部坐标,也就是相对于父级偏移的坐标,通过trangsorm.localPosition可以获得
我们在CoordinateText.cs的Start中加入
print( transform.localPosition );
结果
很明显,没有父级的球体两次都输出了自身的世界坐标
有父级的正方体两次输出不同
下面来看看将坐标各种各样转换
删除正方体,只留下球体,修改代码
运行,结果
看吧。转换来,转换去,都是那个样!