纳金网

标题: 【转载】Unity中的世界坐标和NGUI中的坐标的相互转换 [打印本页]

作者: may    时间: 2015-12-29 05:56
标题: 【转载】Unity中的世界坐标和NGUI中的坐标的相互转换

1、将Unity中的世界坐标转换成NGUI中的坐标,代码如下所示:
    public GameObject TargetObject;         //目标物体
    public Camera worldcamera;         //世界相机。
    public Camera guiCamera;           //UI相机
    // Use this for initialization
    void Start()
    {
        worldcamera =NGUITools.FindCameraForLayer(TargetObject.layer);     //这里是通过物体的层获得相应层上的相机
        guiCamera = NGUITools.FindCameraForLayer(this.gameObject.layer);   //通过脚本所在物体的层获得相应层上的相机
    }
    // Update is called once per frame
    void Update()
    {
    }
    void LateUpdate()
    {
        Vector3 pos = worldcamera.WorldToScreenPoint(TargetObject.transform.position);         //获取目标物体的屏幕坐标
        pos = guiCamera.ScreenToWorldPoint(pos);                              //将屏幕坐标转换为UI的世界坐标
        pos.z = 0;                                //由于NGUI 2D界面的Z轴都为0
        transform.position =new Vector3(pos.x,pos.y,pos.z);      //将修改过的坐标赋给UI界面
    }
}
2、将NGUI的坐标改为Unity中的世界坐标,代码如下所示:
GameObject targetObject = (GameObject)Instantiate(Resources.Load("Model/"+name));
         Camera worldcamera = NGUITools.FindCameraForLayer(targetObject.layer);     //这里是通过物体的层获得相应层上的相机
         Camera guiCamera = NGUITools.FindCameraForLayer(obj.layer);   //通过脚本所在物体的层获得相应层上的相机
         if (worldcamera == null || guiCamera == null)
        {
            return;
        }
        Vector3 pos = guiCamera.WorldToScreenPoint(obj.transform.position);         //获取UI界面的屏幕坐标
        pos.z = 1f;//设置为零时转换后的pos全为0,屏幕空间的原因,被坑过的我提醒大家,切记要改!
        pos = worldcamera.ScreenToWorldPoint(pos);                              //将屏幕坐标转换为世界坐标
        pos.y = 0f;
        targetObject.transform.position = new Vector3(pos.x, pos.y, pos.z);      //将修改过的坐标赋给目标物体坐标







欢迎光临 纳金网 (http://wwww.narkii.com/club/) Powered by Discuz! X2.5