タイトルの通りですが、以下の記事で紹介されいたコードを元に作成しています。
確認環
- Unity 2021.2.5f1
- VisualStudoo 2019
- Windows 10
実装コード
UI 要素の四隅を GetWorldCorners で取得するのは同じですが、基本的に RectTransform を含む必要なプロパティは Graphic から取得できるみたいなので、Graphic コンポーネントの拡張メソッドとして引数なしで呼び出します。また、一回 ScreenSpace - Camera で Camera を設定した状態で Overlay に変更すると Camera が設定されたままになっているようなので判定文を Render Mode を見て判断するようにしています。
public static class GraphicExtension { public static Rect GetScreenRect(this Graphic self) { var _corners = new Vector3[4]; self.rectTransform.GetWorldCorners(_corners); if (self.canvas.renderMode != RenderMode.ScreenSpaceOverlay) { var cam = self.canvas.worldCamera; _corners[0] = RectTransformUtility.WorldToScreenPoint(cam, _corners[0]); _corners[2] = RectTransformUtility.WorldToScreenPoint(cam, _corners[2]); } return new Rect(_corners[0].x, _corners[0].y, _corners[2].x - _corners[0].x, _corners[2].y - _corners[0].y); } }