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); //将修改过的坐标赋给目标物体坐标