string MethodDisplayName(MethodInfo method) { if (Attribute.IsDefined(method, typeof(EditorButtonAttribute))) { EditorButtonAttribute tmp = (EditorButtonAttribute)Attribute.GetCustomAttribute(method, typeof(EditorButtonAttribute)); editorButtonName = tmp.buttonName; if (string.IsNullOrEmpty(editorButtonName)) { StringBuilder sb = new StringBuilder(); sb.Append(method.Name + "("); var methodParams = method.GetParameters(); foreach (ParameterInfo parameter in methodParams) { sb.Append(MethodParameterDisplayName(parameter)); sb.Append(","); } if (methodParams.Length > 0) { sb.Remove(sb.Length - 1, 1); } sb.Append(")"); editorButtonName = sb.ToString(); } } return(editorButtonName); }
public override void OnInspectorGUI() { base.OnInspectorGUI(); var mono = target as MonoBehaviour; var methods = mono.GetType() .GetMembers(BindingFlags.Instance | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) .Where(o => Attribute.IsDefined(o, typeof(EditorButtonAttribute))); foreach (var memberInfo in methods) { EditorButtonAttribute editorButton = (EditorButtonAttribute)Attribute.GetCustomAttribute(memberInfo, typeof(EditorButtonAttribute)); GUI.color = editorButton.c; if (GUILayout.Button(memberInfo.Name)) { var method = memberInfo as MethodInfo; method.Invoke(mono, null); } GUI.color = Color.white; } }
public override void OnGUI(Rect rect, SerializedProperty prop, GUIContent label) { EditorButtonAttribute button = (EditorButtonAttribute)attribute; if (GUI.Button(rect, button.label)) { System.Type type = prop.serializedObject.targetObject.GetType(); if (_eventMethodInfo == null) { _eventMethodInfo = type.GetMethod(button.methodName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); } if (_eventMethodInfo != null) { _eventMethodInfo.Invoke(prop.serializedObject.targetObject, null); } else { Debug.LogWarning(string.Format("Unable to find method {0} in {1}", button.methodName, type)); } } }