using System; using System.Reflection; using UnityEngine; using UnityEditor; // À©Õ¹meshrender editor£¬ÏÔʾ // sortingLayer // sortingOrder // bounds [CustomEditor(typeof(MeshRenderer), true)] [CanEditMultipleObjects] public class MeshRendererInspector : InspectorExt { MeshRenderer renderer; bool s_ShowBounds = false; string s_BoundsIconPath = EditorGUIHelperSetUp.root + "Icons/bounds.png"; GUIContent s_BoundsIcon; protected override string defaultEditorName => "UnityEditor.MeshRendererEditor, UnityEditor"; public override void OnEnable() { base.OnEnable(); renderer = target as MeshRenderer; Setup(); } public override void OnDisable() { base.OnDisable(); Setup(); } void Setup() { s_ShowBounds = false; if(s_BoundsIcon == null) s_BoundsIcon = EditorGUIUtility.IconContent(s_BoundsIconPath); } public sealed override void OnInspectorGUI() { base.OnInspectorGUI(); if (BeginMore()) { string sortingLayer = renderer.sortingLayerName; string[] layers = new string[SortingLayer.layers.Length]; int index = 0; for (int i = 0; i < layers.Length; ++i) { layers[i] = SortingLayer.layers[i].name; if (sortingLayer == layers[i]) index = i; } index = EditorGUILayout.Popup("Sorting Layer", index, layers); renderer.sortingLayerName = layers[index]; renderer.sortingOrder = EditorGUILayout.IntField("Sorting Order", renderer.sortingOrder); s_ShowBounds = EditorGUIHelper.ToggleButton("Show Bounds", s_ShowBounds, s_BoundsIcon); } EndMore(); } public override void OnSceneGUI () { base.OnSceneGUI(); if (s_ShowBounds) { Vector3 center = renderer.bounds.center; float radius = renderer.bounds.extents.magnitude; Handles.color = Color.white; EditorHandlesHelper.WireCube(center, renderer.bounds.size, Color.blue); Handles.color = Color.white; EditorHandlesHelper.Label(center, "bounds:" + renderer.bounds.size,Color.blue); } } }