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