Пример #1
0
    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);
    }
Пример #2
0
    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;
        }
    }
Пример #3
0
        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));
                }
            }
        }