/// <summary> /// 搜集项目中的atlas以及贴图资源显示在文件列表中 /// </summary> public static void CollectAtlas() { string baseDir = Application.dataPath.Substring(0, Application.dataPath.IndexOf("Assets")) + "Assets/MLDJ"; GameObject[] prefabs = BobShrinker.GetPrefabListUsingFileSys(baseDir); List <GameObject> prefabsList = new List <GameObject>(prefabs); GameObject[] atlaslist = BobShrinker.GetUIAtlasListFromPrefabList(prefabs); for (int i = 0; i < atlaslist.Length; i++) { BobUtils.DisplayProgressBar(i, atlaslist.Length, "搜集UIAtlas", atlaslist[i].name); string atlaspath = AssetDatabase.GetAssetPath(atlaslist[i]); if (!BobShrinker.db.ContainsPath(atlaspath)) { AtlasProperty originalAtlasProp = BobShrinker.GetAtlasProperty(atlaslist[i].GetComponent <UIAtlas>(), true); BobShrinker.db.SaveAtlasData(atlaspath, originalAtlasProp, originalAtlasProp); } prefabsList.Remove(atlaslist[i].gameObject); } BobUtils.ClearProgressBar(); Object[] dependencies = EditorUtility.CollectDependencies(prefabsList.ToArray()); for (int i = 0; i < dependencies.Length; i++) { if (dependencies[i] is Texture2D) { BobUtils.DisplayProgressBar(i, dependencies.Length, "搜集Textures", dependencies[i].name); string texturePath = AssetDatabase.GetAssetPath(dependencies[i]); if (!BobShrinker.db.ContainsPath(texturePath)) { TextureImporter ti = TextureImporter.GetAtPath(texturePath) as TextureImporter; if (ti == null) { Debug.LogError(texturePath); continue; } int maxTextSize = 0; TextureImporterFormat tf = new TextureImporterFormat(); bool ret = ti.GetPlatformTextureSettings("WP8", out maxTextSize, out tf);//获取WP8的平台设置 if (ret == false) { maxTextSize = ti.maxTextureSize; ti.SetPlatformTextureSettings("WP8", maxTextSize, ti.textureFormat); //若没有设置WP8平台,则用default的设置来设置 } //备份原始属性 TextureProperty originalTextureProp = new TextureProperty(maxTextSize, ti.mipmapEnabled); originalTextureProp.isOriginal = true; BobShrinker.db.SaveTextureData(texturePath, originalTextureProp, originalTextureProp); } } } BobUtils.ClearProgressBar(); }
/// <summary> /// 添加单个文件路径 /// </summary> /// <param name="filepath"></param> private void AddFileItems(string filepath) { filepath = filepath.Replace('\\', '/'); Object obj = AssetDatabase.LoadAssetAtPath(filepath, typeof(UnityEngine.Object)); if (obj == null) { return; } if (!System.IO.File.Exists(filepath) && System.IO.Directory.Exists(filepath)) {///如果是目录,则遍历其中的所有文件 string[] files = System.IO.Directory.GetFiles(filepath, "*.*", System.IO.SearchOption.AllDirectories); for (int i = 0; i < files.Length; ++i) { AddFileItems(files[i]); } return; } if (obj is Texture) { if (BobShrinker.db.mTexturePaths.Contains(filepath)) { return; } else { TextureImporter ti = TextureImporter.GetAtPath(filepath) as TextureImporter; if (ti == null) { return; } BobUtils.DisplayProgressBar(1, 1, "添加文件", filepath); int maxTextSize = 0; TextureImporterFormat tf = new TextureImporterFormat(); bool ret = ti.GetPlatformTextureSettings("WP8", out maxTextSize, out tf);//获取WP8的平台设置 if (ret == false) { maxTextSize = ti.maxTextureSize; ti.SetPlatformTextureSettings("WP8", maxTextSize, ti.textureFormat); //若没有设置WP8平台,则用default的设置来设置 } //备份原始属性 TextureProperty originalTextureProp = new TextureProperty(maxTextSize, ti.mipmapEnabled); originalTextureProp.isOriginal = true; BobShrinker.db.SaveTextureData(filepath, originalTextureProp, originalTextureProp); } } if (obj is GameObject) { GameObject go = obj as GameObject; UIAtlas uiatlas = go.GetComponent <UIAtlas>(); if (uiatlas != null) { if (BobShrinker.db.mAtlasPaths.Contains(filepath)) { return; } else if (uiatlas.spriteMaterial == null) { Debug.LogError(filepath + " has no materials"); return; } else { BobUtils.DisplayProgressBar(1, 1, "添加文件", filepath); AtlasProperty originalAtlasProp = BobShrinker.GetAtlasProperty(uiatlas, true); BobShrinker.db.SaveAtlasData(filepath, originalAtlasProp, originalAtlasProp); } } List <string> dependencies = BobUtils.CollectDependencies(filepath);//获取依赖资源 接着AddItems for (int i = 0; i < dependencies.Count; ++i) { AddFileItems(dependencies[i]); } } }