の記事に内容を追加して拡張メソッドとして利用できるようにしたものです
GetWorldCorners
を利用すると RectTransform の4角の座標を取得することができる
この際に Canvas の RenderMode が Overlay じゃない場合は、座標変換が必要になるので
RectTransformUtility.WorldToScreenPoint
を利用してスクリーン座標に変換する
public static class RectTransformExtension { private static readonly Vector3[] _corners = new Vector3[4]; public static Rect GetScreenRect(this RectTransform self, PointerEventData data) { return self.GetScreenRect(data.pressEventCamera); } public static Rect GetScreenRect(this RectTransform self) { var canvas = self.GetComponentInParent<Canvas>(); return self.GetScreenRect(canvas.worldCamera); } public static Rect GetScreenRect(this RectTransform self, Camera camera) { self.GetWorldCorners(_corners); if (camera != null) { _corners[0] = RectTransformUtility.WorldToScreenPoint(camera, _corners[0]); _corners[2] = RectTransformUtility.WorldToScreenPoint(camera, _corners[2]); } var rect = new Rect { x = _corners[0].x, y = _corners[0].y }; rect.width = _corners[2].x - rect.x; rect.height = _corners[2].y - rect.y; return rect; } }