/// <summary> /// 解析类 /// </summary> public ClassSerialize ParseClass(MonoBehaviour monoBehaviour) { ClassSerialize classSerialize = new ClassSerialize(); if (monoBehaviour == null) { return(classSerialize); } Type type = monoBehaviour.GetType(); classSerialize.monoBehaviour = monoBehaviour; classSerialize.name = type.Name; FieldInfo[] allFieldInfo = type.GetFields(BindingFlags.NonPublic | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Static); foreach (FieldInfo fieldInfo in allFieldInfo) { classSerialize.allField.Add(ParseField(fieldInfo)); } MethodInfo[] allMemberInfo = type.GetMethods(BindingFlags.NonPublic | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Static); foreach (MethodInfo memberInfo in allMemberInfo) { classSerialize.allMethod.Add(ParseMethod(memberInfo)); } return(classSerialize); }
public void ShowClass(ClassSerialize classSerialize) { for (int i = 0; i < classSerialize.allField.Count; i++) { ShowField(classSerialize, classSerialize.allField[i]); } for (int i = 0; i < classSerialize.allMethod.Count; i++) { ShowMethod(classSerialize, classSerialize.allMethod[i]); } }
public void ShowMethod(ClassSerialize classSerialize, Method method) { ParameterInfo[] allParameterInfo = method.methodInfo.GetParameters(); if (method.parameters == null) { method.parameters = new object[allParameterInfo.Length]; } for (int i = 0; i < allParameterInfo.Length; i++) { ParameterInfo parameterInfo = allParameterInfo[i]; if (parameterInfo.ParameterType == typeof(int)) { int value = (int)method.parameters[i]; if (ShowInt(parameterInfo.Name, ref value)) { method.parameters[i] = value; } } else if (parameterInfo.ParameterType == typeof(string)) { string value = string.Empty; if (method.parameters[i] != null) { value = method.parameters[i].ToString(); } if (ShowString(parameterInfo.Name, ref value)) { method.parameters[i] = value; } } } if (GUILayout.Button(method.methodInfo.Name)) { method.methodInfo.Invoke(classSerialize.monoBehaviour, method.parameters); } }
public void ShowField(ClassSerialize classSerialize, Field field) { if (field.fsieldInfo.FieldType == typeof(int)) { ShowField_int(field, classSerialize.monoBehaviour); } else if (field.fsieldInfo.FieldType == typeof(float)) { ShowField_float(field, classSerialize.monoBehaviour); } else if (field.fsieldInfo.FieldType == typeof(string)) { ShowField_string(field, classSerialize.monoBehaviour); } else if (field.fsieldInfo.FieldType == typeof(List <int>)) { ShowField_List_int(field, classSerialize.monoBehaviour); } }
public void ShowClass(List <ClassSerialize> allClassSerialize) { if (allClassSerialize == null) { return; } for (int i = 0; i < allClassSerialize.Count; i++) { ClassSerialize classSerialize = allClassSerialize[i]; classSerialize.isShow = GUILayout.Toggle(classSerialize.isShow, classSerialize.name); if (classSerialize.isShow == true) { ShowClass(classSerialize); } } }