static void CreateVersionFile(string tarFolder) { string versionPath = string.Format("{0}/{1}", tarFolder, BuildConfig.finalLoadingVersionName); int mainVersion = 0, musicVersion = 0, artVersion = 0; if (File.Exists(versionPath)) { string versionString = File.ReadAllLines(versionPath)[0]; string[] versionLines = versionString.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries); mainVersion = int.Parse(versionLines[0]); musicVersion = int.Parse(versionLines[1]); artVersion = int.Parse(versionLines[2]); } string mainVersionPath = string.Format("{0}/{1}", tarFolder, BuildConfig.GetLoadingVersionName(BuildConfig.Project.Main)); string musicVersionPath = string.Format("{0}/{1}", tarFolder, BuildConfig.GetLoadingVersionName(BuildConfig.Project.Music)); string artVersionPath = string.Format("{0}/{1}", tarFolder, BuildConfig.GetLoadingVersionName(BuildConfig.Project.Art)); if (File.Exists(mainVersionPath)) { string mainVersionString = File.ReadAllText(mainVersionPath); mainVersion = int.Parse(mainVersionString); File.Delete(mainVersionPath); } if (File.Exists(musicVersionPath)) { string musicVersionString = File.ReadAllText(musicVersionPath); musicVersion = int.Parse(musicVersionString); File.Delete(musicVersionPath); } if (File.Exists(artVersionPath)) { string artVersionString = File.ReadAllText(artVersionPath); artVersion = int.Parse(artVersionString); File.Delete(artVersionPath); } string finalVersionString = string.Format("{0}.{1}.{2}\n{3},{4},{5}", mainVersion, musicVersion, artVersion, BuildConfig.GetLoadingListName(BuildConfig.Project.Main), BuildConfig.GetLoadingListName(BuildConfig.Project.Music), BuildConfig.GetLoadingListName(BuildConfig.Project.Art)); CreateDirectory(versionPath); File.WriteAllText(versionPath, finalVersionString); }
/// <summary> /// 打包AeestBundle和配置信息等到与Asset同级的AssetBundle目录下 /// </summary> /// <returns></returns> public static IEnumerator Build() { yield return("开始打包..."); // 1. 读取打包资源列表配置 yield return("读取打包列表配置..."); List <BaseAssetManager> managerList = BuildConfig.GetAssetManagerList(); if (managerList == null || managerList.Count < 1) { string str = "无任何要打包的资源,请检查配置是否正确。"; yield return(str); EditorUtility.DisplayDialog("错误", str, "确定"); yield break; } StringBuilder sb = new StringBuilder("资源列表如下:\n"); foreach (var c in managerList) { sb.AppendLine(c.ToString()); } yield return(sb.ToString()); // 2. 读取上次打包结果 yield return("读取上次打包结果..."); List <string> lastBuildConfigList = null; if (File.Exists(BuildConfig.buildingListPath)) { string[] lastBuildConfig = File.ReadAllLines(BuildConfig.buildingListPath); if (lastBuildConfig != null && lastBuildConfig.Length > 0) { lastBuildConfigList = new List <string>(lastBuildConfig); int findIndex; foreach (var manager in managerList) { foreach (var item in manager.items) { findIndex = item.ReadConfig(lastBuildConfigList); //找到对应文件下标则删除该列数据 if (findIndex >= 0) { lastBuildConfigList.RemoveAt(findIndex); } } } } } else { yield return("这是第一次打包。"); } // 3. 计算资源的Md5... yield return("计算资源的Md5..."); foreach (var manager in managerList) { manager.ComputeMd5(); } bool needBuild = false; sb.Length = 0; sb.AppendLine("需要重新打包的资源如下:"); foreach (var manager in managerList) { if (manager.isChange) { needBuild = true; sb.AppendLine(manager.assetFolderPath); } } //lastBuildConfigList还未删除的数据说明已经没有这些资源需要打包,即要删掉对应的AB包 List <string> removedList = GetFileNeedRemoveArray(lastBuildConfigList); // 4. 打包 if (needBuild) { UpdateBuildingItemsFlag(managerList); yield return(sb.ToString()); // 打包 yield return("打包中..." + BuildConfig.tempbuildingAssetBundlesFolder); // 先打到一个临时目录 UnityBuild(BuildConfig.tempbuildingAssetBundlesFolder, managerList); // 检查是否所有的包都已正确生成 bool succeed = IsAllAssetBuildSucceed(managerList, BuildConfig.buildingAssetBundlesFolder); if (!succeed) { throw new InvalidOperationException("生成失败,未知原因"); } yield return("打包完成!"); // 打包完成事件 foreach (var c in managerList) { if (c.isChange) { c.OnBuildFinished(); } } } sb.Length = 0; bool isVersionChanged = IsVersionChanged(managerList, removedList, ref sb); string buildResult = sb.ToString(); yield return(buildResult); // 6. 生成列表文件,版本文件,日志文件 yield return("生成增量文件..."); if (isVersionChanged) { SaveBuildingListFile(managerList, BuildConfig.tempBuildingListPath, ref sb); // 供打包用的列表文件 int version = UpdateVersion(); WriteVersionFile(BuildConfig.tempBuildingVersionPath, version); // 供打包用的版本文件 } // 供下载用的版本文件(存本地版本号,用于和服务器上最新版本号对比) string strVersion = SaveLoadingVersionFile(BuildConfig.tempLoadingVersionPath); yield return("最新版本为: " + strVersion); // 日志文件 if (isVersionChanged) { SaveLog(buildResult, strVersion, BuildConfig.tempBuildingLogPath); } // 供下载用的列表文件 SaveLoadingListFile(managerList, BuildConfig.tempLoadingListPath); // 将打的包移动到对应目录 CopyFiles(BuildConfig.tempBuildingRootFolder, BuildConfig.buildingRootFolder); // 删除移除的ab包 DeleteRemovedAssetBundles(removedList); // dispose foreach (var manager in managerList) { manager.Dispose(); } }