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; } } } }
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); }