エディタスクリプト 2つのGameObjectを選択した時の情報をシーンビューに表示
自分に需要があったので。
シーンに配置した2つのGameObjectがあり、
「あれ、この2つはどれくらい離れているのだっけ、、」ということがあり、
一瞬、差分を求める式を書いて実行してログ出して・・などとやって
事足りてはいるのだけど、
もうちょっとスマートにやりたくもあり、
エディタスクリプトでいつも使えるようにする方法。
シーンビューにUIを表示するのは
SceneView.onSceneGUIDelegate
にデリゲート追加して、処理を追加。
Hierarchyのオブジェクトが選択されたことを検知するためには
Selection.selectionChanged
にデリゲートを追加。
選択中のオブジェクトはSelection.gameObjectsで取得できます。
今回は距離を表示してみたかったので、
選択しているオブジェクトが2つの場合に、
距離を求めるように。(ついでにAABBの情報)
距離が有効な値の場合のみ、シーンビューに表示をするようにしています。
コードは以下のよう。
sing System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; [InitializeOnLoad] public class EditorDistance { static float distance; static Bounds aabb; static EditorDistance() { SceneView.onSceneGUIDelegate += (sceneView) => { if( 0.0f > distance ) { return; } Handles.BeginGUI(); GUILayout.Window(1, new Rect(10, 26, 240, 47), OnGUI, GUIContent.none); Handles.EndGUI(); }; Selection.selectionChanged += () => { if( 2 == Selection.gameObjects.Length ) { var p0 = Selection.gameObjects[0].transform.position; var p1 = Selection.gameObjects[1].transform.position; distance = Vector3.Distance(p0, p1); aabb.center = p0; aabb.extents = Vector3.zero; aabb.Encapsulate(p1); } else { distance = -1.0f; } }; } static void OnGUI(int id) { EditorGUILayout.LabelField("distance", distance.ToString()); EditorGUILayout.LabelField("center", aabb.center.ToString()); EditorGUILayout.LabelField("extents", aabb.extents.ToString()); } }
Hierarchyで、二つオブジェクトを選択すると下のように表示されます。