RectTransform转屏幕坐标
分两种情况
Canvas渲染模式为Overlay时,使用此方式
public Rect GetScreenCoordinatesOfCorners(RectTransform rt)
{var worldCorners = new Vector3[4];rt.GetWorldCorners(worldCorners);var result = new Rect(worldCorners[0].x,worldCorners[0].y,worldCorners[2].x - worldCorners[0].x,worldCorners[2].y - worldCorners[0].y);return result;
}
/// <summary>
/// RectTransform转屏幕坐标
/// </summary>
/// <param name="rt"></param>
/// <returns></returns>
public Vector2 RectTransformToScreenPoint(RectTransform rt)
{Rect screenRect = GetScreenCoordinatesOfCorners(rt);return new Vector2(screenRect.center.x, screenRect.center.y);
}
Canvas渲染模式为Camera时,使用此方式
/// <summary>
/// RectTransform转屏幕坐标
/// </summary>
/// <param name="rt"></param>
/// <param name="uiCamera"></param>
/// <returns></returns>
public Vector2 GetScreenPoint(RectTransform rt,Camera uiCamera)
{return uiCamera.WorldToScreenPoint(rt.position);
}
屏幕坐标转RectTransfom局部坐标
针对锚点变化暂未测试
/// <summary>
/// 屏幕坐标转局部坐标
/// </summary>
/// <param name="screenPoint"></param>
/// <param name="parent"></param>
/// <param name="UICamera"></param>
/// <returns></returns>
public Vector2 ScreenPointToRectTransform(Vector2 screenPoint, RectTransform parent,Camera UICamera)
{Vector2 LocalPoint = Vector2.zero;RectTransformUtility.ScreenPointToLocalPointInRectangle(RT, screenPoint, UICamera, out LocalPoint);return LocalPoint;
}