/// <summary> /// Builds the asset bundles update A. /// </summary> public static void buildAssetBundlesUpdateAB() { EditorUtility.DisplayProgressBar("Generate FileList", "loading bundle manifest", 1 / 2); AssetDatabase.Refresh(); string readPath = EditorUtils.GetFileStreamingOutAssetsPath(); // 读取Streaming目录 var u3dList = EditorUtils.getAllChildFiles(readPath, @"\.meta$|\.manifest$|\.DS_Store$|\.u$", null, false); List <string> assets = new List <string> (); foreach (var s in u3dList) { string ab = EditorUtils.GetAssetPath(s); //s.Replace(readPath, "").Replace("/", "").Replace("\\", ""); assets.Add(ab); } readPath = new System.IO.DirectoryInfo(EditorUtils.GetLuaBytesResourcesPath()).FullName; // 读取lua 目录 u3dList = EditorUtils.getAllChildFiles(readPath, @"\.bytes$", null); foreach (var s in u3dList) { string ab = EditorUtils.GetAssetPath(s); //s.Replace(readPath, "").Replace("/", "").Replace("\\", ""); assets.Add(ab); } EditorUtility.ClearProgressBar(); CUtils.DebugCastTime("Time Generate FileList End"); Debug.Log("all assetbundle count = " + assets.Count); BuildScript.GenerateAssetBundlesUpdateFile(assets.ToArray()); CUtils.DebugCastTime("Time GenerateAssetBundlesUpdateFile End"); }
/// <summary> /// 设置变体 /// </summary> public static void SetAssetBundlesVariantsAndName() { Object[] selection = Selection.objects; string apath = null; foreach (Object s in selection) { apath = AssetDatabase.GetAssetPath(s); if (Directory.Exists(apath)) { var myFolderName = s.name.ToLower(); var allFiles = EditorUtils.getAllChildFiles(apath, ".prefab$"); string title = "set folder " + myFolderName + " variants"; string info = ""; Debug.LogWarningFormat("the folder({0})'s all prefab's variant will set to {1} ", apath, myFolderName); EditorUtility.DisplayProgressBar(title, info, 0); float i = 0; float all = allFiles.Count; foreach (var abPath in allFiles) { info = abPath; var prefab = AssetDatabase.LoadAssetAtPath(abPath, typeof(Object)); if (prefab) { SetAssetBundleName(prefab, true, true, myFolderName); } else { Debug.LogWarningFormat("{0} is not exists", abPath); } i = i + 1; EditorUtility.DisplayProgressBar(title, info, i / all); } EditorUtility.ClearProgressBar(); } else { SetAssetBundleName(s, true, true); } } }
public static void SetFolderPackingTag() { var selection = Selection.objects; string path = string.Empty; StringBuilder sb = new StringBuilder(); foreach (Object s in selection) { if (s is DefaultAsset && (path = AssetDatabase.GetAssetPath(s)) != null && Directory.Exists(path)) { var import = AssetImporter.GetAtPath(path); var ragName = s.name.ToLower() + "_atlas"; sb.Append("set folder spritePackingTag = "); sb.Append(ragName); sb.Append("\r\n"); var allchildren = EditorUtils.getAllChildFiles(path, @"\.meta$|\.manifest$|\.DS_Store$|\.u$", null, false); int count = 0; foreach (var f in allchildren) { count++; TextureImporter ti = AssetImporter.GetAtPath(f) as TextureImporter; EditorUtility.DisplayProgressBar("Processing...", "替换中... (" + count + " / " + allchildren.Count + ")", (float)count / (float)allchildren.Count); if (ti) { ti.spritePackingTag = ragName; sb.AppendLine(ti.name); ti.assetBundleName = ragName + Common.CHECK_ASSETBUNDLE_SUFFIX; ti.SaveAndReimport(); } } EditorUtility.ClearProgressBar(); } } sb.AppendLine("\r\ncompleted"); Debug.Log(sb.ToString()); }
/// <summary> /// 1 读取首包,找出忽略文件 /// </summary> /// <param name="ignoreFiles">Ignore files.</param> public static bool ReadFirst(string[] allBundles, out FileManifest firstCrcDict, out FileManifest streamingManifest, FileManifest extensionFileManifest) { // string title = "read first crc file list"; bool firstExists = false; firstCrcDict = null; HugulaExtensionFolderEditor.instance = null; string readPath = Path.Combine(FirstOutReleasePath, CUtils.platform); string firstFileName = CUtils.InsertAssetBundleName(CUtils.GetRightFileName(Common.CRC32_FILELIST_NAME), "_v" + CodeVersion.CODE_VERSION.ToString()); readPath = Path.Combine(readPath, firstFileName); Debug.Log(readPath); //check tmp directory if (!Directory.Exists("Assets/Tmp")) { Directory.CreateDirectory("Assets/Tmp"); } // extensionFileManifest.Clear(); //读取首包 WWW abload = new WWW("file://" + readPath); if (string.IsNullOrEmpty(abload.error) && abload.assetBundle != null) { var ab = abload.assetBundle; Object[] assets = ab.LoadAllAssets(); foreach (Object o in assets) { if (o is FileManifest) { firstCrcDict = o as FileManifest; firstExists = true; firstCrcDict.WriteToFile("Assets/Tmp/firstPackageManifest.txt"); Debug.Log(firstCrcDict.Count); } } ab.Unload(false); } else { Debug.LogWarning(abload.error + "no frist packeage in " + readPath); } abload.Dispose(); //读取本地AB包AssetBundleManifest var fileListName = Common.CRC32_FILELIST_NAME; var url = CUtils.PathCombine(CUtils.GetRealStreamingAssetsPath(), CUtils.GetRightFileName(fileListName)); AssetBundle assetbundle = AssetBundle.LoadFromFile(url); var assets1 = assetbundle.LoadAllAssets <FileManifest>(); uint len = 0; var crc32 = CrcCheck.GetLocalFileCrc(url, out len); var streamingManifest1 = assets1[0]; assetbundle.Unload(false); // streamingManifest = streamingManifest1; streamingManifest1.crc32 = crc32; Debug.Log(streamingManifest1.appNumVersion); Debug.Log(streamingManifest1.crc32); //读取assetbundle的crc和size ReadAssetToABInfos(allBundles, streamingManifest1); if (!HugulaSetting.instance.spliteExtensionFolder)//如果不分离文件 { streamingManifest = streamingManifest1; streamingManifest.hasFirstLoad = false; streamingManifest.WriteToFile("Assets/Tmp/StreamingAssetsManifest.txt"); extensionFileManifest.WriteToFile("Assets/Tmp/ExtensionFileManifest.txt"); return(firstExists); } //读取忽略扩展包 System.Action <string, int> AddExtensionFileManifest = (string ab, int priority1) => { var abinfo = streamingManifest1.GetABInfo(ab); if (abinfo == null) { Debug.LogWarningFormat("the file {0} is not exists. please check ExtenionFolder.txt", ab); // abinfo = new ABInfo(ab, 0, 0, priority1); // streamingManifest1.Add(abinfo); return; } abinfo.priority = priority1; extensionFileManifest.Add(abinfo); }; string firstStreamingPath = CUtils.realStreamingAssetsPath; var needLoadFirst = false; var onlyInclusionFiles = HugulaExtensionFolderEditor.instance.OnlyInclusionFiles;//只包涵 var onlyInclusionRightFiles = new List <string>(); foreach (var f in onlyInclusionFiles) { onlyInclusionRightFiles.Add(CUtils.GetRightFileName(f)); } var firstPriority = FileManifestOptions.FirstLoadPriority; var firstLoadFiles = HugulaExtensionFolderEditor.instance.FirstLoadFiles;//读取首包资源 var firstLoadRightFiles = new List <string>(); foreach (var f in firstLoadFiles) { firstLoadRightFiles.Add(CUtils.GetRightFileName(f)); } var manualPriority = FileManifestOptions.ManualPriority; var extensionFiles = HugulaExtensionFolderEditor.instance.ExtensionFiles;//读取扩展文件资源 var extensionRightFiles = new List <string>(); foreach (var f in extensionFiles) { extensionRightFiles.Add(CUtils.GetRightFileName(f)); } var autoPriority = FileManifestOptions.AutoHotPriority; Dictionary <int, int> priorityDic = new Dictionary <int, int>(); priorityDic[firstPriority] = firstPriority; priorityDic[manualPriority] = manualPriority; priorityDic[autoPriority] = autoPriority; priorityDic[FileManifestOptions.StreamingAssetsPriority] = FileManifestOptions.StreamingAssetsPriority; //streamingAssets目录下的文件夹默认为手动加载 DirectoryInfo dinfo = new DirectoryInfo(firstStreamingPath); var dircs = dinfo.GetDirectories(); foreach (var dir in dircs) { var u3dList = EditorUtils.getAllChildFiles(dir.FullName, @"\.meta$|\.manifest$|\.DS_Store$", null, false); foreach (var s in u3dList) { string ab = CUtils.GetAssetBundleName(s); ab = ab.Replace("\\", "/"); extensionRightFiles.Add(ab); } } var allAbInfos = streamingManifest1.allAbInfo; bool shouldInclude = false; bool elseShouldInAutoHot = onlyInclusionRightFiles.Count > 0 && false; bool elseShouldInFirst = onlyInclusionRightFiles.Count > 0; foreach (var abInfo in allAbInfos) { shouldInclude = onlyInclusionRightFiles.Contains(abInfo.abName); if (!shouldInclude && firstLoadRightFiles.Contains(abInfo.abName))//首次启动加载包 { priorityDic[firstPriority]++; AddExtensionFileManifest(abInfo.abName, priorityDic[firstPriority]); needLoadFirst = true; } else if (!shouldInclude && extensionRightFiles.Contains(abInfo.abName)) //手动加载 { priorityDic[manualPriority]++; AddExtensionFileManifest(abInfo.abName, priorityDic[manualPriority]); } else if (!shouldInclude && elseShouldInAutoHot) //放入自动热更新包 { priorityDic[autoPriority]++; AddExtensionFileManifest(abInfo.abName, priorityDic[autoPriority]); } else if (!shouldInclude && elseShouldInFirst) { priorityDic[firstPriority]++; AddExtensionFileManifest(abInfo.abName, priorityDic[firstPriority]); needLoadFirst = true; } } if (!HugulaSetting.instance.spliteExtensionFolder) { needLoadFirst = false; } streamingManifest = streamingManifest1; streamingManifest.hasFirstLoad = needLoadFirst; streamingManifest.WriteToFile("Assets/Tmp/StreamingAssetsManifest.txt"); extensionFileManifest.WriteToFile("Assets/Tmp/ExtensionFileManifest.txt"); EditorUtility.ClearProgressBar(); return(firstExists); }
public static void CreateAtlasAsset() { var selection = Selection.objects; string path = string.Empty; StringBuilder sb = new StringBuilder(); foreach (Object s in selection) { if (s is DefaultAsset && (path = AssetDatabase.GetAssetPath(s)) != null && Directory.Exists(path)) { // var import = AssetImporter.GetAtPath(path); var ragName = s.name.ToLower() + "_atlas.asset"; string atlas_path = Path.Combine(path, ragName); sb.Append("Crate atlas Asset :"); sb.Append(ragName); sb.Append("\r\n"); var allchildren = EditorUtils.getAllChildFiles(path, @"\.meta$|\.manifest$|\.DS_Store$|\.u$", null, false); int count = 0; List <int> names = new List <int>(); List <Sprite> allSprites = new List <Sprite>(); foreach (var f in allchildren) { count++; TextureImporter ti = AssetImporter.GetAtPath(f) as TextureImporter; if (ti != null) { Object[] objs = AssetDatabase.LoadAllAssetRepresentationsAtPath(f); foreach (var item in objs) { if (item is Sprite) { names.Add(LuaHelper.StringToHash(item.name)); allSprites.Add((Sprite)item); } } EditorUtility.DisplayProgressBar("Processing...", "生成中... (" + count + " / " + allchildren.Count + ")", count / allchildren.Count); } } EditorUtility.ClearProgressBar(); //生成或者替换资源 AtlasAsset atlas = AssetDatabase.LoadAssetAtPath <AtlasAsset>(atlas_path); if (atlas == null) { atlas = AtlasAsset.CreateInstance <AtlasAsset>(); AssetDatabase.CreateAsset(atlas, atlas_path); } atlas.names = names; atlas.sprites = allSprites; EditorUtility.SetDirty(atlas); var import = AssetImporter.GetAtPath(atlas_path); import.assetBundleName = Path.GetFileNameWithoutExtension(ragName) + Common.CHECK_ASSETBUNDLE_SUFFIX; sb.AppendFormat("build {0} success count = {1} ", ragName, names.Count); AssetDatabase.SaveAssets(); } } sb.AppendLine("\r\nall completed"); Debug.Log(sb.ToString()); }