Unity将世界坐标转为UI坐标
话不多说,直接上代码:
public void World2ToUI(Vector3 wpos, RectTransform uiTarget)
{
//初始化一个屏幕坐标
Vector2 m_tempV2 = Vector2.zero;
//使用场景相机将世界坐标转换为屏幕坐标
Vector3 spos = sceneCamera.WorldToScreenPoint(wpos);
m_tempV2.Set(spos.x, spos.y);
Vector2 retPos;
RectTransformUtility.ScreenPointToLocalPointInRectangle(uiParent.GetComponent<RectTransform>(),
m_tempV2, UICamera, out retPos);
//将欲显示的东西显示在父物体画布上
uiTarget.SetParent(uiParent.GetComponent<RectTransform>());
//比例保持原比例
uiTarget.localScale = Vector3.one;
//对应的锚点坐标
uiTarget.anchoredPosition3D = retPos;
}
代码分析:
该函数的第一个参数表示要转换的坐标,第二个参数表示2D对象的RectTransform
其中sceneCamera指的是场景相机,uiParent指的是UI画布,UICamera指的是UI相机
这是在3D捕鱼游戏中用到的函数,这里用了两个相机,一个场景相机用来显示3D鱼模型,一个UI相机用来显示 UI界面。
读者可以根据自己的需求进行修改。