Unity3d复习之坐标系与转换

  • A+
所属分类:Unity3d 原创文章

今天复习一下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)。

先看看世界坐标系

新建一个场景,创建一个正方体和一个球体

将它们放在不同的位置

Unity3d复习之坐标系与转换Unity3d复习之坐标系与转换

都添加脚本CoordinateText.cs

在Start方法输出位置

print( transform.position );

看看结果

Unity3d复习之坐标系与转换

跟Transform显示的一样(这时候不存在父子关系)

当我将正方体扔到球体上时,让球体成为正方体的父类

 Unity3d复习之坐标系与转换Unity3d复习之坐标系与转换

可以看到正方体显示Position属性发生了改变

我们运行一下

发现结果并没有发生改变,证明tranform.position取得的是世界坐标

我们并没有移动它们,结果自然没有发生改变

而Cube有了父级,则它在属性显示中显示的是局部坐标,也就是相对于父级偏移的坐标,通过trangsorm.localPosition可以获得

我们在CoordinateText.cs的Start中加入

print( transform.localPosition );

结果

Unity3d复习之坐标系与转换

很明显,没有父级的球体两次都输出了自身的世界坐标

有父级的正方体两次输出不同

下面来看看将坐标各种各样转换

删除正方体,只留下球体,修改代码

Unity3d复习之坐标系与转换

运行,结果

Unity3d复习之坐标系与转换

看吧。转换来,转换去,都是那个样!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: