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(); } } }
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(); }