Exemplo n.º 1
0
    void Awake()
    {
        string assetName = gameObject.name + ComponentInfoObject.ExName;

        if (ResourcesLoaderHelper.resourcesList.ContainsKey(assetName))
        {
            ComponentInfoObject compInfoObj = ResourcesLoaderHelper.Instance.LoadResource(assetName) as ComponentInfoObject;
            foreach (Component comp in compInfoObj.componentGroup)
            {
                Debug.Log(comp.GetType().Name);
                System.Type compType = comp.GetType();
                Component   compOnGo = gameObject.GetComponent(compType.Name);
                if (compOnGo != null)
                {
                    compOnGo = comp;
                }
                else
                {
                    System.Type goType        = gameObject.GetType();
                    MethodInfo  addCompMethod = goType.GetMethod("AddComponent");
                    addCompMethod.MakeGenericMethod(compType);
                    addCompMethod.Invoke(gameObject, null);
                    //compOnGo = comp;
                }
            }
        }
    }
Exemplo n.º 2
0
    private static void ReadPrefab(GameObject go)
    {
        //
        if (go.GetComponent <ComponentLoader>() != null)
        {
            Debug.logger.Log(go.name + "已经是一个处理过的prefab");
            return;
        }

        Component[] comps = go.GetComponents <Component>();

        ComponentInfoObject compDataObj = ScriptableObject.CreateInstance <ComponentInfoObject>();

        compDataObj.componentGroup = new List <Component>(comps);

        foreach (Component comp in compDataObj.componentGroup)
        {
            System.Type compType = comp.GetType();
            Debug.LogError(compType.Name);

            foreach (FieldInfo info in compType.GetFields())
            {
                if (info.IsPublic && !info.IsStatic)
                {
                    Debug.Log("Field " + info.Name);
                    ///TODO写入域信息
                }
            }

            foreach (PropertyInfo info in compType.GetProperties())
            {
                if (info.GetGetMethod() != null && info.GetSetMethod() != null &&
                    info.GetGetMethod().IsPublic&& info.GetSetMethod().IsPublic&&
                    info.CanRead && info.CanWrite)
                {
                    Debug.Log("Property " + info.Name);
                    ///TODO写入属性信息
                }
            }
        }

        string path = ComponentInfoObjectRootPath + go.name + ComponentInfoObject.ExName;

        if (!Directory.Exists(ComponentInfoObjectRootPath))
        {
            Directory.CreateDirectory(ComponentInfoObjectRootPath);
        }

        AssetDatabase.CreateAsset(compDataObj, path);
    }