private static void BundleLuaFile(AssetBundleBuildSearchInfo info) { string path = AssetBundlePath.GameAssetsDirectory + info.searchDirectory; if (Directory.Exists(path)) { string tempDir = AssetBundlePath.LuaTempDir; if (tempDir.EndsWith("/")) { tempDir = tempDir.Substring(0, tempDir.Length - 1); } DirectoryInfo dir = new DirectoryInfo(tempDir); //获取到已有的lua文件(因为可能有多个地方copy lua文件到临时目录) FileInfo[] preFiles = dir.GetFiles("*", SearchOption.AllDirectories); //将当前lua文件拷贝到临时文件中 string newPath = AssetBundleBuildLuaUtil.CopyLuaFileToTempDirAndRenameExt(path); string assetBundleName = info.assetBundleName .Replace("{DirPath}", dir.FullName.Replace("\\", "/")) .Replace("{DirName}", dir.Name) .Replace(AssetBundlePath.GameAssetsDirectory, ""); FileInfo[] files = dir.GetFiles("*", info.isOnlyTopDir ? SearchOption.TopDirectoryOnly : SearchOption.AllDirectories); //排除已有的文件 List <FileInfo> addFiles = new List <FileInfo>(); if (files != null) { for (int i = 0; i < files.Length; i++) { if (preFiles != null) { bool isPreFile = false; for (int j = 0; j < preFiles.Length; j++) { if (preFiles[j].FullName == files[i].FullName) { isPreFile = true; break; } } if (!isPreFile) { addFiles.Add(files[i]); } } else { addFiles.Add(files[i]); } } } AddAssetBundleBuild(info, assetBundleName, addFiles.ToArray()); } else { Debug.LogError("[BundleLuaFile]path not find!path = " + path); } }
public static bool StartBuildAssetBundle(BuildTarget platform, bool isForceRebuild = false, bool onlyBuildLua = false) { AssetBundleBuildLuaUtil.CheckAndCreateLuaTempDir(); buildResultInfo = AssetBundleBuildParseUtil.GenarateAssetBundleBuildDatas(AssetBundleConfig.GetAllGroupInfos()); //暂时移除所有的已有bundle(即每次重新打包) //EditorFileOperate.RemoveDir(AssetBundlePath.GetAssetBundlePath()); //移除不存在的bundle资源文件与文件夹 RemoveNonexistAssetBundleFiles(); AssetBundleBuild[] needBuildFileList = buildResultInfo.ToBuildArray(); HashSet <string> onlyMoveFileList = buildResultInfo.onlyMoveFileList; EditorPlatformPath.CheckDirExists(AssetBundlePath.GetAssetBundlePath()); AssetBundleBuild[] realBuildFileList = needBuildFileList; if (onlyBuildLua) { List <AssetBundleBuild> tempList = new List <AssetBundleBuild>(); for (int i = 0; i < needBuildFileList.Length; i++) { if (needBuildFileList[i].assetBundleName.IndexOf(AssetBundlePath.LuaBundleNamePre) != -1) { tempList.Add(needBuildFileList[i]); } } realBuildFileList = tempList.ToArray(); } AssetBundleManifest manifest = BuildPipeline.BuildAssetBundles(AssetBundlePath.GetAssetBundlePath(), realBuildFileList, isForceRebuild ? BuildAssetBundleOptions.ForceRebuildAssetBundle : BuildAssetBundleOptions.None, platform); AssetBundleBuildLuaUtil.ClearLuaTempDir(); bool succ = true; if (manifest == null) { Debug.Log("BuildAssetBundle Fail!"); return(false); } //如果只打lua文件,不需要移动这些 if (!onlyBuildLua) { MoveFiles(onlyMoveFileList); MoveManifestAB(); } else { DeleteManifestAB(); } succ = succ && GenerateAssetBundleMappings(needBuildFileList); //MoveMainAssetBundle(); //ChageAssetBundleManifetDependToRelativePath(); AssetDatabase.Refresh(); if (succ) { Debug.Log("BuildAssetBundle Success!"); } else { Debug.Log("BuildAssetBundle Fail!"); } return(true); }