/// <summary> /// 根据打包选项获取需要搜索的文件夹 /// </summary> /// <returns></returns> protected List <string> GetPackDirectories() { string rootDirectory = m_packSetting.SrcDir; string childDirctory = m_packBundleSetting.SubFolder; string searchDirectory = string.IsNullOrEmpty(childDirctory) ? rootDirectory : Path.Combine(rootDirectory, childDirctory); List <string> directories = new List <string>(); if (m_packBundleSetting.SearchSubDir) { directories = EngineFileUtil.SearchDirectoryRecursively(searchDirectory); } else { directories.Add(searchDirectory); } return(directories); }
/// <summary> /// 处理最后要把资源拷贝到其他的目录 /// </summary> private static void CopyGOEBundleToPath(string orignalGOEBundleListPath) { //拷贝到程序的开发目录(如果有目录) if (Directory.Exists(PathConfig.CODE_ROOT)) { DirectoryInfo devPath = new DirectoryInfo(PathConfig.BIN_RES_DIR_WINDOWS_DEV); if (!devPath.Exists) { devPath.Create(); } FileInfo[] files = devPath.GetFiles("*.*"); foreach (FileInfo file in files) { file.Delete(); } EngineFileUtil.CopyDirectory(orignalGOEBundleListPath, PathConfig.BIN_RES_DIR_WINDOWS_DEV); } }
public override Dictionary <string, List <string> > GetAssetsDictByPackSetting() { Dictionary <string, List <string> > bundlemapDict = new Dictionary <string, List <string> >(); List <string> directories = GetPackDirectories(); foreach (string directory in directories) { string relativeDirectoryPath = EngineFileUtil.GetFileRelativePath(directory, m_packSetting.SrcDir); if (string.IsNullOrEmpty(relativeDirectoryPath)) { continue; } string assetBundleName = MakeAssetbundleName(relativeDirectoryPath); List <string> assetFiles = GetDirectoryFileListWithSearchOption(directory); bundlemapDict.Add(assetBundleName, assetFiles); } return(bundlemapDict); }
public override Dictionary <string, List <string> > GetAssetsDictByPackSetting() { Dictionary <string, List <string> > bundlemapDict = new Dictionary <string, List <string> >(); List <string> packDirectories = GetPackDirectories(); foreach (string directory in packDirectories) { List <string> directoryFiles = GetDirectoryFileListWithSearchOption(directory); for (int i = 0; i < directoryFiles.Count; ++i) { string fileRelativePath = EngineFileUtil.GetFileRelativePath(directoryFiles[i], m_packSetting.SrcDir); if (string.IsNullOrEmpty(fileRelativePath)) { continue; } string fileWithoutExtension = Path.GetFileNameWithoutExtension(directoryFiles[i]); string customBundleName = fileRelativePath + "_" + fileWithoutExtension; string bundleName = fileRelativePath == "./" ? MakeAssetbundleName(fileWithoutExtension) : MakeAssetbundleName(customBundleName); if (bundlemapDict.ContainsKey(bundleName)) { Debug.LogErrorFormat("bundle {0} is exist", bundleName); } bundlemapDict.Add(bundleName, new List <string>() { directoryFiles[i] }); } } return(bundlemapDict); }
bool DoPack(bool silent, BuildTarget target, out string error, HashSet <string> excludePackSet, out Dictionary <string, object> extra, out AssetBundleManifest buildManifest) { extra = new Dictionary <string, object>(); buildManifest = null; BuildTargetGroup buildTargetGroup = ConvertBuildTarget(target); if (!EditorUserBuildSettings.SwitchActiveBuildTarget(buildTargetGroup, target)) { error = "buildtarget platform : " + target.ToString(); return(false); } if (!silent && !UnityEditor.EditorUtility.DisplayDialog("确认打包", "此操作会对所有修改过的资源进行打包,继续吗?", "是", "否")) { error = null; return(true); } AssetDatabase.SaveAssets(); string[] files = Directory.GetFiles("Assets/EngineCoreEditor/Editor/PackV5/Definitions/", "*.pack.txt"); List <AssetBundleBuild> builds = new List <AssetBundleBuild>(); List <string> rawAssetList = new List <string>(); string outputDir = GetBundleOutputPath(target); string currentSceneBeforeBuild = EditorSceneManager.GetActiveScene().path; //打开一个空场景 EditorSceneManager.OpenScene("Assets/EmptyScene.unity"); foreach (string packConfig in files) { bool shoudlSkip = excludePackSet != null && excludePackSet.Contains(Path.GetFileName(packConfig)); if (shoudlSkip) { continue; } //打包选项配置 GOEPackV5 si = JsonUtil.ReadJsonObject(packConfig) as GOEPackV5; string packingResFolder = si.SrcDir; if (!Directory.Exists(packingResFolder)) { Debug.LogWarningFormat("{0} target resource folder:{1} not exist,ignore build", packConfig, packingResFolder); continue; } if (si == null) { error = "无法读取文件:" + packConfig; if (!silent) { EditorUtility.DisplayDialog("打包错误", error, "确定"); } return(false); } List <AssetBundleBuild> b; HashSet <string> allAssetSet = null; if (!si.ConfigureAssetImporter(silent, out error, out b, extra, shoudlSkip, out allAssetSet)) { return(false); } if (PackEntry.RawAsset.Contains(Path.GetFileName(packConfig))) { rawAssetList.AddRange(allAssetSet); } else { if (!shoudlSkip) { builds.AddRange(b); } } } AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); //UnityEditor.Sprites.Packer.SelectedPolicy = "DefaultPackerPolicy1024"; string currentPackBundleMapPath = Path.Combine(outputDir, BUNDLE_DIR_NAME); //manifest的bundle没有后缀 if (builds.Count == 0) { error = "无打包资源,请检查.pack文件,及.pack文件的Filter"; return(false); } buildManifest = BuildPipeline.BuildAssetBundles(outputDir, builds.ToArray(), BuildAssetBundleOptions.ChunkBasedCompression, target); string rawAssetDir = Path.Combine(outputDir, PathConfig.RAW_ASSET_PATH); EngineFileUtil.ClearOrCreateEmptyFolder(rawAssetDir); foreach (string rawAssetPath in rawAssetList) { string fileName = Path.GetFileName(rawAssetPath); string dstPath = Path.Combine(rawAssetDir, fileName); File.Copy(rawAssetPath, dstPath, true); } if (buildManifest == null) { error = "打包失败,manifest 文件为空"; return(false); } DeleteUselessBundleFiles(buildManifest, outputDir); //todo:guangze song 2018-9-5 21:45:39:Editor下,切Scene会把堆对象清空(切Scene之后Manifest被清空) //if (!string.IsNullOrEmpty(currentSceneBeforeBuild)) // EditorSceneManager.OpenScene(currentSceneBeforeBuild, OpenSceneMode.Single); error = string.Empty; return(true); }