static void GenerateAssetBundle() { int count = 0; Dictionary <BuildAssetBundleOptions, List <AssetBundleBuild> > buildAbbMap = new Dictionary <BuildAssetBundleOptions, List <AssetBundleBuild> >(); for (int i = 0; i < buildInfoList.Count; i++) { BuildInfo buildInfo = buildInfoList[i]; foreach (var subInfo in buildInfo.subBuildInfoMap.Values) { for (int j = 0; j < subInfo.assetPaths.Count; j++) { if (subInfo.ignore) { continue;//增量更新被忽略掉 } if (BuildType.Scene == buildInfo.buildType) { string path = subInfo.assetPaths[j]; string dirName = Path.GetDirectoryName(path); string name = BMUtility.Path2Name(dirName + "/" + Path.GetFileNameWithoutExtension(path)); if (settings.useHashName) { name = subInfo.buildMd5; } string outputPath = string.Format("{0}/{1}.{2}", Output_Path, name, settings.Suffix_Bundle); BuildPipeline.BuildPlayer(new string[] { path }, outputPath, buildTarget, BuildOptions.BuildAdditionalStreamedScenes); count += 1; } else { BuildAssetBundleOptions opt = BuildAssetBundleOptions.None; switch (buildInfo.compressType) { case CompressType.LZ4: opt |= BuildAssetBundleOptions.ChunkBasedCompression; break; case CompressType.None: opt |= BuildAssetBundleOptions.UncompressedAssetBundle; break; } switch (buildInfo.buildType) { case BuildType.Pack: case BuildType.Single: case BuildType.Shader: opt |= BuildAssetBundleOptions.DeterministicAssetBundle; break; case BuildType.Lua: opt |= BuildAssetBundleOptions.DeterministicAssetBundle; break; } List <AssetBundleBuild> list; if (!buildAbbMap.TryGetValue(opt, out list)) { list = new List <AssetBundleBuild>(); buildAbbMap.Add(opt, list); } if (!list.Contains(subInfo.assetBundleBuild)) { list.Add(subInfo.assetBundleBuild); } } } } } foreach (var buildAbb in buildAbbMap) { count += buildAbb.Value.Count; BuildPipeline.BuildAssetBundles(Output_Path, buildAbb.Value.ToArray(), buildAbb.Key, buildTarget); } //清除临时的lua bundle 文件 foreach (var path in tempLuaPaths) { if (File.Exists(path)) { File.Delete(path); } } AssetDatabase.Refresh(); }
static void CalcAssetBundleInfos() { for (int i = 0; i < buildInfoList.Count; i++) { BuildInfo buildInfo = buildInfoList[i]; buildInfo.subBuildInfoMap = new Dictionary <string, SubBuildInfo>(); for (int j = 0; j < buildInfo.assetPaths.Count; j++) { string path = buildInfo.assetPaths[j]; string dirName = Path.GetDirectoryName(path); string name; int version = 0; switch (buildInfo.buildType) { case BuildType.Pack: name = BMUtility.Path2Name(dirName); break; case BuildType.Scene: name = BMUtility.Path2Name(dirName + "/" + Path.GetFileNameWithoutExtension(path)); if (scenesVersionDict.TryGetValue(path, out string verStr)) { version = int.Parse(verStr); } else { //新场景 version = 1; scenesVersionDict.Add(path, version.ToString()); BMEditUtility.SaveDictionary(settings.scenesVersionFile, scenesVersionDict); } break; case BuildType.Shader: name = BMUtility.Path2Name(buildInfo.buildName); break; case BuildType.Lua: name = BMUtility.Path2Name(buildInfo.buildName); break; default: // BuildType.Single: name = BMUtility.Path2Name(dirName + "/" + Path.GetFileName(path)); break; } string md5 = BMUtility.EncryptWithMD5(name + "." + settings.Suffix_Bundle); SubBuildInfo subInfo = null; if (!buildInfo.subBuildInfoMap.TryGetValue(md5, out subInfo)) { string abName = name; if (settings.useHashName) { abName = md5; } subInfo = new SubBuildInfo() { bundleName = name, buildMd5 = md5, buildType = buildInfo.buildType, version = version, assetBundleBuild = new AssetBundleBuild() { assetBundleName = abName, assetBundleVariant = settings.Suffix_Bundle, }, assetPaths = new List <string>(), assetHashs = new List <string>(), dependenceMap = new Dictionary <string, string[]>(), dependenceHashMap = new Dictionary <string, string[]>(), }; buildInfo.subBuildInfoMap.Add(md5, subInfo); } //添加依赖关系 AddDependence(path, subInfo.dependenceMap); string hash = HashHelper.ComputeMD5(path); subInfo.assetPaths.Add(path.ToLower()); subInfo.assetHashs.Add(hash); AssetBundleBuild abb = subInfo.assetBundleBuild; abb.assetNames = subInfo.assetPaths.ToArray(); //abb.addressableNames = subInfo.assetPaths.ToArray(); subInfo.assetBundleBuild = abb; EditorUtility.DisplayProgressBar("Calc Asset Bundle Build Infos...", path, (float)(j + 1.0f) / (float)buildInfo.assetPaths.Count); } } EditorUtility.ClearProgressBar(); Logger.Log("Calc Asset Bundle Infos Over."); }