//-------------------------------------------------------------------------------------------- // 生成对应文件的 Object 对象 static public List <Object> BuildObjectList(ref BuildArgs vArgs, BundleVersionControl version, ref bool isNeedPackage) { isNeedPackage = false; string szPckNm = Path.GetFileName(vArgs.vPack); szPckNm = szPckNm.ToLower(); List <Object> objList = new List <Object>(); foreach (string fileName in vArgs.fAry) { string szt = fileName.ToLower(); if (szt.EndsWith(".unity")) { Debug.LogWarning("BuildPipeline Skip file = " + fileName); continue; } if (szt.EndsWith(".unitypackage")) { Debug.LogWarning("BuildPipeline Skip file = " + fileName); continue; } string fl = ArchiveUtil.NtfPathBeginAssets(fileName); fl = fl.Replace('\\', '/'); string szKey = ArchiveUtil.NtfPathAfterAssets(fl).ToLower(); if (version != null && version.UpdateFileMD5(szKey, szPckNm) == false) {//MD5相同,不用打包 } else { isNeedPackage = true; } Object obj = AssetDatabase.LoadMainAssetAtPath(fl); if (null == obj) { Debug.LogWarning("BuildPipeline LOAD failed file = " + fileName); continue; } objList.Add(obj); vArgs.kAry.Add(szKey); ResPackItm itm = new ResPackItm(); itm.mType = 0; // 普通资源 itm.mfVer = 1; //// 需要查找对应版本号 itm.mFile = szKey; itm.mPack = szPckNm; vArgs.vTbl.Add(szKey, itm); } //更新package对应的版本号 if (version != null && isNeedPackage) { version.IncreasePackageVersion(szPckNm); } return(objList); }
//-------------------------------------------------------------------------------------------- // // 创建对应 平台的 AssetBundle 文件 // // 根据目录构建. 注意: 忽略 ArchiveUtil.mSkips 里相关的 static public bool ExportToBundle(string szPath, string saveFile, BuildTarget tgt, BundleVersionControl version = null) { List <string> fList = ArchiveUtil.NtfGetFiles(szPath, true); return(ExportToBundle(fList, saveFile, tgt, version)); }
// 根据文件列表构建 static public bool ExportToBundle(List <string> fList, string saveFile, BuildTarget tgt, BundleVersionControl version = null) { BuildArgs vArgs = new BuildArgs(); vArgs.vPack = saveFile; vArgs.fAry = fList; //检查文件对应的MD5与当前版本里的MD5是否对应,如果不对应,则加入打包列表,并且修改对应的包的版本号 bool isNeedPackage = false; List <Object> objList = BuildObjectList(ref vArgs, version, ref isNeedPackage); if (isNeedPackage) { if (BuildAssetBundleWithNames(objList, vArgs.kAry, saveFile, tgt)) { WriteResList(vArgs.vTbl, tgt); return(true); } return(false); } return(true); }
//-------------------------------------------------------------------------------------------- // 生成普通资源包 static public void BuildGamePack(string file, List <string> fLst, BuildTarget tgt, bool silence, BundleVersionControl version) { file = file.ToLower(); string szNm = GetTargetName(tgt); string msg = @"确定要生成 " + szNm + @" 客户端资源包吗? 这个过程可能会很漫长"; if (silence || EditorUtility.DisplayDialog(@"游戏版本发布", msg, "Ok", "Cancel")) { if (AssetBundleUtil.ExportToBundle(fLst, file, tgt, version)) { msg = szNm + @" 客户端资源包已生成, 存放于: " + file; if (!silence) { EditorUtility.DisplayDialog(@"操作已完成", msg, "Ok"); } else { Debug.Log(msg); } } else { msg = szNm + @" 客户端资源包生成失败,是否继续???"; for (int i = 0; i < fLst.Count; i++) { msg += "\r\n" + fLst[i]; } //EditorUtility.DisplayDialog(@"操作失败", msg, "Ok"); if (!EditorUtility.DisplayDialog(@"操作失败", msg, "Ok", "Cancel")) { throw new System.Exception("error file:" + file); } } } }