3d世界坐标 和 NGUI坐标 互转
///
<summary>
///
把3d世界坐标转换NGUI坐标,并赋值uiwidget
///
</summary>
///
<param name="
_3dPos
">
必须在3d相机的视野范围内,否则转换错误
</param>
///
<param name="
_3d
"></param>
///
<param name="
_2d
"></param>
///
<param name="
uiWidget
"></param>
///
<returns></returns>
public
static
Vector3
WorldToNgui(
Vector3
_3dPos,
Camera
_3d,
Camera
_2d,
UIWidget
uiWidget)
{
Vector3
pos = _3d.WorldToViewportPoint(_3dPos);
uiWidget.transform.position = _2d.ViewportToWorldPoint(pos);
pos = uiWidget.transform.localPosition;
pos.x =
Mathf
.FloorToInt(pos.x);
pos.y =
Mathf
.FloorToInt(pos.y);
pos.z = 0f;
uiWidget.transform.localPosition = pos;
return
pos;
}
///
<summary>
///
NGUI 坐标转世界坐标
///
</summary>
///
<param name="
worldcamera
"></param>
///
<param name="
uiCamera
"></param>
///
<param name="
uiPos
"></param>
///
<returns></returns>
public
static
Vector3
NguiToWorld(
Camera
uiCamera,
Camera
worldcamera,
Vector3
uiPos)
{
if
(worldcamera ==
null
|| uiCamera ==
null
)
{
return
Vector3
.zero;
}
Vector3
pos = uiCamera.WorldToScreenPoint(uiPos);
//NGUI坐标转屏幕坐标
pos.z = 1f;
//设置为零时转换后的pos全为0,屏幕空间的原因,被坑过的我提醒大家,切记要改!
pos = worldcamera.ScreenToWorldPoint(pos);
//屏幕坐标转NGUI坐标
pos.y = 0f;
return
pos;
}