うどんてっくメモ

技術的なメモをまったりと

【Unity】ワールド上のRectTransformをSceneView上のEditorGUIで表示する

Unityのシーンビュー上のデバッグ機能を作っていて、特定のUIパーツのRectをSceneView上で適当な矩形で塗りつぶして表示したかった時のメモ

RectTransform.positionから表示しようとすると矩形のサイズが合わなくて困っていたのですが、HandleUtilityとRectTransform.GetWorldCornersの組み合わせでいけました。

// ここで任意のRectTransformを指定する
var rectTransform = GetComponent<RectTransform>();

Handles.BeginGUI();
var corners = new Vector3[4];
// 四隅を取得
rectTransform.GetWorldCorners(corners);

// 四隅の座標をSceneView上の座標に変換する
for (int i = 0; i < 4; i++)
{
    corners[i] = HandleUtility.WorldToGUIPoint(corners[i]);
}

// 四隅の座標からRectに変換して描画
var rect = new Rect(corners[0], corners[2] - corners[0]);
EditorGUI.DrawRect(rect, new Color(0.6f, 0.6f, 0.6f, 0.3f));
Handles.EndGUI();

適当なボタンを配置して試した結果がこちらです。

特定のuGUIパーツをSceneView上で確認したかったりする方は覚えておくと役立つかもしれません。