概述
Unity3d中常见的坐标系有:
1.世界坐标系。引擎提供的空间坐标系,可通过transform.position获取坐标
2.视口坐标系。是相对于相机的坐标系,屏幕左下角为(0,0),右上角为(1,1),z轴的方向是从屏幕指向外面的,z的数值是在世界空间中z的相反数,如果Camera在世界空间中是(0,0,0),那么在屏幕上的所有点的视口坐标的z都是0,如果Camera在世界空间中是(0,0,-10),那么在屏幕上的所有点的视口坐标的z都是10
3.屏幕坐标系。是以显示设备的分辨率来定义的,左下角为(0,0),右上角为(Screen.width,Screen.height),z轴与视口坐标相同
4.NGUI坐标系。通常NGUI的根节点在世界空间中的位置都是(0,0,0),但是根节点会有缩放Scale.
坐标变换:
API提供的坐标变换方法
ScreenToViewportPoint 屏幕转视口
ScreenToWorldPoint 屏幕转世界
ViewportToScreenPoint 视口转屏幕
ViewportToWorldPoint 视口转世界
WorldToScreenPoint 世界转屏幕
WorldToViewportPoint 世界转视口
常用的坐标变换方式:
Vector3 NGUI2World(Vector3 pos,float z)
{
pos.z = 0;
pos = SceneObjMgr.Instance.UICamera.WorldToScreenPoint(pos);
pos.z = z;
return Camera.main.ScreenToWorldPoint(pos);
}
Vector3 World2World(Vector3 pos, float z)
{
pos = Camera.main.WorldToScreenPoint(worldPos);
pos.z = z;
return Camera.main.ScreenToWorldPoint(pos);
}
Vector3 Screen2NGUI(Vector3 pos)
{
return SceneObjMgr.Instance.UICamera.ScreenToWorldPoint(pos);
}
Vector3 NGUI2Screen(Vector3 pos)
{
pos.z = 100;
pos = Camera.main.WorldToScreenPoint(pos);
pos.z = 0;
return pos;
}
注意一个事,凡是与世界空间相关的坐标,z轴需要在视锥体之内,因为在视锥之外是看不见的,转换无意义
最后
以上就是单薄玫瑰为你收集整理的Unity3d常见坐标系和坐标变换的全部内容,希望文章能够帮你解决Unity3d常见坐标系和坐标变换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复