Unity 坐标 转换 详解 World世界坐标 Screen屏幕坐标 View视口坐标 GUI坐标 NGUI坐标 localPosition相对父级坐标

在制作游戏中我们经常会遇到这样一个需求

 

在人物模型的上面显示 名字、称号 一类的文字或者图片 如下图

人物模型属于是Camera1  

UI Title信息属于NGUI Camera2

如下图

这时候我们就要用到坐标转换了 确定UI Title 的世界坐标

代码如下:

Transform charater = null;//角色Transform
Transform TitleLabel = null;//Title Label Transform

Camera camera1 = Camera.main;//照射模型Camera
Camera camera2 = UICamera.currentCamera;//NGUI Camera

Vector3 pos = camera1.WorldToScreenPoint(charater.position);//Camera1的世界坐标转为屏幕坐标
pos.z = 0;//不需要 制为0

Vector3 pos2 = camera2.ScreenToWorldPoint(pos);//屏幕坐标转为camera2的世界坐标

TitleLabel.position = pos2;//设置TitleLabel的世界坐标

 

 

 

 

 

 

 

 

 

想知道为什么 我们一起来详细的了解一下Unity 坐标的知识

 

查看Unity圣典 TransfromCamera 组件

 

Transfrom 组件有如下图2个变量

 

 

Camera 组件有如下图6个函数

 

看完上面翻译的信息 是不是对于 世界坐标 屏幕坐标 视口坐标 不是很理解 下面我们来详细介绍一下这些坐标

 

WorldSpace(世界坐标):

游戏场景原点世界坐标为(0,0,0) 

获取和设置代码如下:

transform.position = Vector3.zero;//设置transform的世界坐标为原点(0,0,0)

Vector3 vector3 = transform.position;//获得transform的世界坐标给vector3

 

ScreenSpace(屏幕坐标):

Screen Space是以像素来定义的 左下角为(0,0)   右上角为(Screen.width,Screen.height)  Z的位置是以相机的世界单位来衡量的。

例如场景分辨率1024x768,如果屏幕被缩小至100x100,那么点击右上角是100x100,而不是分辨率的1024x768。

鼠标的坐标 单个手指触摸屏幕坐标 都为屏幕坐标

Debug.Log(Input.mousePosition);//鼠标的坐标

Debug.Log(Input.GetTouch(0).position);//单个手指触摸屏幕坐标

 

ViewPortSpace(视口坐标):

视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。

 

GUI坐标

这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。 

 

NGUI坐标

其实没有什么NGUI坐标

要设置NGUI坐标 需要获得UICamera.currentCamera来转换坐标

 

 

了解了上面的知识 相信你利用 Camera 的那6个函数 可以随便的转换坐标了。

完结!

posted @ 2017-05-15 21:22  邹强  阅读(3469)  评论(1编辑  收藏  举报