public void OnInspectorGUI()
        {
            if (buttonMethods.Count == 0)
            {
                return;
            }

            for (int index = 0; index < buttonAttributes.Count; index++)
            {
                MethodInfo        methodInfo        = buttonMethods[index];
                ButtonExAttribute buttonExAttribute = buttonAttributes[index];
                bool disabled = false;
                if (buttonExAttribute.showIfRunTime != ShowIfRunTime.All)
                {
                    if (buttonExAttribute.showIfRunTime == ShowIfRunTime.Playing != Application.isPlaying)
                    {
                        disabled = true;
                    }
                }

                using (new EditorGUI.DisabledScope(disabled))
                {
                    GUILayout.BeginHorizontal();
                    string name = methodInfo.Name;
                    if (GUILayout.Button(name))
                    {
                        for (int i = 0; i < serializedObject.targetObjects.Length; i++)
                        {
                            methodInfo.Invoke(serializedObject.targetObjects[i], null);
                        }

                        //methodInfo.Invoke(target, null);
                    }

                    for (int i = 0; i < buttonExAttribute.funcNames.Length; i++)
                    {
                        string funcName = buttonExAttribute.funcNames[i];
                        if (GUILayout.Button(funcName))
                        {
                            for (int j = 0; j < serializedObject.targetObjects.Length; j++)
                            {
                                ButtonAttributeDrawer.CalledFunc(serializedObject.targetObjects[j], funcName);
                            }
                        }
                    }

                    GUILayout.EndHorizontal();
                }
            }
        }
示例#2
0
        private static void CustomInspectorGUI(SerializedObject serializedObject, Object target, QObjectInspector editor,
                                               ButtonExAttributeDrawer buttonExAttributeDrawer)
        {
            //这部分是使用了反编译Editor的代码
            EditorGUI.BeginChangeCheck();
            serializedObject.Update();
            SerializedProperty iterator = serializedObject.GetIterator();
            Event eventCurrent          = Event.current;

            GUILayout.Space(3);
            for (bool enterChildren = true; iterator.NextVisible(enterChildren); enterChildren = false)
            {
                //using (new EditorGUI.DisabledScope(false))
                //{
                Type      type       = target.GetType();
                FieldInfo fieldInfos =
                    type.GetField(iterator.name, BindingFlags.Instance | BindingFlags.Public |
                                  BindingFlags.NonPublic | BindingFlags.GetField);
                while (fieldInfos == null)
                {
                    type = type.BaseType;
                    if (type == null)
                    {
                        break;
                    }

                    fieldInfos = type.GetField(iterator.name,
                                               BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField);
                }

                if (fieldInfos == null)
                {
                    EditorGUILayout.PropertyField(iterator, true);
                    GUILayout.Space(-21);
                    GUILayout.BeginHorizontal();
                    if (GUILayout.Button(EditorGUIUtility.TrTextContent("Name Go"), sStyles.scriptName,
                                         GUILayout.Width(EditorGUIUtility.labelWidth - 22)))
                    {
                        Undo.RecordObjects(Selection.objects, "Rename");
                        for (int j = 0; j < serializedObject.targetObjects.Length; j++)
                        {
                            if (ButtonAttributeDrawer.CalledFunc(serializedObject.targetObjects[j], "NameGo"))
                            {
                                continue;
                            }

                            serializedObject.targetObjects[j].name = serializedObject.targetObjects[j].GetType().Name;
                        }
                    }

                    //治疗双击脚本不能打开的问题
                    //if (GUILayout.Button(EditorGUIUtilityEx.TempContent("Open..."), sStyles.scriptName,
                    //	GUILayout.Width(EditorGUIUtility.labelWidth / 2 - 6)))
                    //{
                    //	AssetDatabase.OpenAsset(iterator.objectReferenceValue);
                    //	GUIUtility.ExitGUI();
                    //}

                    GUILayout.EndHorizontal();
                    buttonExAttributeDrawer.OnInspectorGUI();
                    continue;
                }

                //检查ShowIf特性
                if (!CheckShowIf(fieldInfos, iterator, target))
                {
                    continue;
                }

                EditorGUILayout.PropertyField(iterator, true);
                Event e = Event.current;
                if (e.type == EventType.KeyDown && e.keyCode == KeyCode.C)
                {
                    if (GUILayoutUtility.GetLastRect().Contains(e.mousePosition))
                    {
                        GUIUtility.systemCopyBuffer = iterator.name;
                    }
                }
            }

            serializedObject.ApplyModifiedProperties();
            EditorGUI.EndChangeCheck();
        }