public static void DrawInspector(Editor wcEditor, System.Type baseType, List <string> ignoreClasses = null)
        {
            var so     = new SerializedObject(wcEditor.targets);
            var target = wcEditor.target;

            so.Update();

            var baseTypes      = new List <System.Type>();
            var baseTargetType = target.GetType();

            baseTypes.Add(baseTargetType);
            while (baseType != baseTargetType)
            {
                baseTargetType = baseTargetType.BaseType;
                baseTypes.Add(baseTargetType);
            }
            baseTypes.Reverse();

            SerializedProperty prop = so.GetIterator();
            var result = prop.NextVisible(true);

            if (result == true)
            {
                EditorGUILayout.PropertyField(prop, false);

                var currentType = EditorUtilitiesEx.FindTypeByProperty(baseTypes, prop);
                EditorGUILayout.BeginVertical();
                {
                    while (prop.NextVisible(false) == true)
                    {
                        var cType = EditorUtilitiesEx.FindTypeByProperty(baseTypes, prop);
                        if (cType != currentType)
                        {
                            currentType = cType;

                            var name = cType.Name;
                            if (ignoreClasses != null && ignoreClasses.Contains(name) == true)
                            {
                                continue;
                            }

                            EditorUtilitiesEx.DrawSplitter(name);
                        }

                        EditorGUILayout.PropertyField(prop, true);
                    }

                    prop.Reset();
                }
                EditorGUILayout.EndVertical();
            }

            so.ApplyModifiedProperties();
        }
        public static void DrawSplitter(string label)
        {
            var splitted = label.Split('`');

            if (splitted.Length > 1)
            {
                label = splitted[0];
            }

            var labelStyle = EditorUtilitiesEx.GetLabelStyle();
            var size       = labelStyle.CalcSize(new GUIContent(label.ToSentenceCase()));

            GUILayout.Label(label.ToSentenceCase().UppercaseWords(), labelStyle);
            var lastRect = GUILayoutUtility.GetLastRect();

            CustomGUI.Splitter(new Rect(lastRect.x, lastRect.y + lastRect.height * 0.5f, lastRect.width * 0.5f - size.x * 0.5f, 1f));
            CustomGUI.Splitter(new Rect(lastRect.x + lastRect.width * 0.5f + size.x * 0.5f, lastRect.y + lastRect.height * 0.5f, lastRect.width * 0.5f - size.x * 0.5f, 1f));
        }
Пример #3
0
 public override void OnInspectorGUI()
 {
     EditorUtilitiesEx.DrawInspector(this, typeof(ScriptableObject));
 }
 public override void OnInspectorGUI()
 {
     EditorUtilitiesEx.DrawInspector(this, typeof(Component));
 }