Unity3d常见坐标系和坐标变换

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.widthScreen.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)