unity的物体是在世界坐标里的,如果让UI里的物体对准世界里的物体需要一系列的转换。
private void ShowTowerUpgrade(TowerCtrl ctrl)
{
towerCtrl = ctrl;//3D世界里的物体
transform.localPosition = WorldPointToUILocalPoint(ctrl.transform.position);
}
private Vector3 WorldPointToUILocalPoint(Vector3 point)
{
//将世界坐标转为屏幕坐标
Vector3 screenPoint = Camera.main.WorldToScreenPoint(point);
//将屏幕坐标转换到RectTransform的局部坐标中
Vector2 uiPosition;
RectTransformUtility.ScreenPointToLocalPointInRectangle(transform.parent.GetComponent<RectTransform>(), screenPoint, UIManager.Instance.UICamera, out uiPosition);
return uiPosition;
}
这段代码是挂在UI中的m_Upgrade上的,所以代码中的transform指的是m_Upgrade的transform