#pragma strict
// a custom editor that draws a labeled circle around the selected MeshRenderer in the scene view
@CustomEditor (MeshRenderer)
public class MeshRendererEditor extends Editor
{
protected function OnSceneGUI ()
{
var meshRenderer: MeshRenderer = target as MeshRenderer;
// get an orientation pointing from the selected object to the camera
var cameraToTarget: Vector3 = Camera.current.transform.position - meshRenderer.transform.position;
var billboardOrientation: Quaternion = Quaternion.LookRotation (cameraToTarget, Camera.current.transform.up);
// set the handle matrix to the target's position, oriented facing the camera
var matrix: Matrix4x4 = Matrix4x4.TRS (meshRenderer.transform.position, billboardOrientation, Vector3.one);
var scope = new Handles.DrawingScope (Color.magenta, matrix);
// draw a magenta circle around the selected object with a label at the top
var size: Vector3 = meshRenderer.bounds.size;
var radius: float = Mathf.Max (size.x, size.y, size.z);
Handles.DrawWireArc (Vector3.zero, Vector3.forward, Vector3.right, 360f, radius);
Handles.Label (Vector3.up * radius, meshRenderer.name);
// JavaScript requires that you manually dispose of the scope when you are done with it
scope.Dispose ();
}
}
using UnityEditor;
using UnityEngine;
// a custom editor that draws a labeled circle around the selected MeshRenderer in the scene view
[CustomEditor(typeof(MeshRenderer))]
public class MeshRendererEditor : Editor
{
protected virtual void OnSceneGUI()
{
MeshRenderer meshRenderer = (MeshRenderer)target;
// get an orientation pointing from the selected object to the camera
Vector3 cameraToTarget = Camera.current.transform.position - meshRenderer.transform.position;
Quaternion billboardOrientation = Quaternion.LookRotation(cameraToTarget, Camera.current.transform.up);
// set the handle matrix to the target's position, oriented facing the camera
Matrix4x4 matrix = Matrix4x4.TRS(meshRenderer.transform.position, billboardOrientation, Vector3.one);
using (new Handles.DrawingScope(Color.magenta, matrix))
{
// draw a magenta circle around the selected object with a label at the top
Vector3 size = meshRenderer.bounds.size;
float radius = Mathf.Max(size.x, size.y, size.z);
Handles.DrawWireArc(Vector3.zero, Vector3.forward, Vector3.right, 360f, radius);
Handles.Label(Vector3.up * radius, meshRenderer.name);
}
}
}