Exemplo n.º 1
0
        void DrawProperty(PropertyInfo propertyInfo)
        {
            try
            {
                if (propertyInfo.GetGetMethod(true) == null)
                {
                    return;
                }

                bool hasSetMethod = propertyInfo.GetSetMethod(true) != null;
                if (hasSetMethod == false)
                {
                    GUI.enabled = false;
                }

                object value = TypeDrawer.Draw(propertyInfo.PropertyType, propertyInfo.Name, propertyInfo.GetValue(target, null));

                if (hasSetMethod)
                {
                    propertyInfo.SetValue(target, value, null);
                }

                GUI.enabled = true;
            }
            catch (Exception ex)
            {
                EditorGUILayout.LabelField(ex.ToString());
            }
        }
Exemplo n.º 2
0
        void DrawMethod(MethodInfo methodInfo)
        {
            try
            {
                var impossibleParams = methodInfo.GetParameters().Where(item =>
                                                                        item.ParameterType != typeof(int) &&
                                                                        item.ParameterType != typeof(long) &&
                                                                        item.ParameterType != typeof(float) &&
                                                                        item.ParameterType != typeof(string) &&
                                                                        item.ParameterType != typeof(bool) &&
                                                                        item.ParameterType != typeof(Vector2) &&
                                                                        item.ParameterType != typeof(Vector3) &&
                                                                        item.ParameterType != typeof(Vector4) &&
                                                                        item.ParameterType.IsEnum == false &&
                                                                        typeof(UnityEngine.Object).IsAssignableFrom(item.ParameterType) == false).ToArray();

                if (impossibleParams.Length > 0)
                {
                    return;
                }

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel(methodInfo.Name);

                List <object> methodParams = null;
                if (_methodParamsDict.TryGetValue(methodInfo, out methodParams) == false)
                {
                    methodParams = new List <object>();
                    _methodParamsDict.Add(methodInfo, methodParams);
                }

                EditorGUILayout.BeginVertical();

                ParameterInfo[] parameters = methodInfo.GetParameters();
                for (int i = 0; i < parameters.Length; ++i)
                {
                    if (methodParams.Count <= i)
                    {
                        if (parameters[i].ParameterType.IsValueType)
                        {
                            methodParams.Add(Activator.CreateInstance(parameters[i].ParameterType));
                        }
                        else
                        {
                            methodParams.Add(null);
                        }
                    }

                    methodParams[i] = TypeDrawer.Draw(parameters[i].ParameterType, parameters[i].Name, methodParams[i]);
                }

                if (GUILayout.Button("Invoke"))
                {
                    object returnValue = methodInfo.Invoke(target, methodParams.ToArray());
                    if (returnValue != null)
                    {
                        Debug.Log(returnValue);
                    }
                }

                EditorGUILayout.EndVertical();

                EditorGUILayout.EndHorizontal();
            }
            catch (Exception ex)
            {
                EditorGUILayout.LabelField(ex.ToString());
            }
        }