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()); } }
void DrawMethod(MethodInfo methodInfo) { try { var impossibleParams = methodInfo.GetParameters().Where(item => item.ParameterType != typeof(int) && 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).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()); } }