RectTransform
の Rect を取得するには、 Canvas が Overlay 以外の場合 Camera が必要になり、自前で取得処理をする必要がある
それが面倒だったので PointerEventData
の enterEventCamera
を利用して楽に Rect を取得する
public static class RectTransformUtil { private static Vector3[] cache = new Vector3[4]; public static Rect GetRect(RectTransform rect, PointerEventData data) { rect.GetWorldCorners(cache); // Canvas が overlay じゃない場合の対応 if (data.enterEventCamera != null) { // Screen座標 に変換 (左下, 左上, 右下, 右上) for (var i = 0; i < cache.Length; i++) cache[i] = RectTransformUtility.WorldToScreenPoint(data.enterEventCamera, cache[i]); } return new Rect(cache[0].x, cache[0].y, cache[2].x - cache[0].x, cache[2].y - cache[0].y); } }
使い方
UnityEngine.EventSystems
の interface なら、引数に PointerEventData
があるので
これを利用して以下のように呼び出すことで Rect が取得できる
public void OnPointerDown(PointerEventData eventData) { var rect = RectTransformUtil.GetRect(transform as RectTransform, eventData); }