public virtual void ExportAssetBundle(List <EditorAssetInfo> buildAssets, string exportPath, string cachePath, BuildTarget[] platforms, ExportType type, bool exportWithManifest) { Dictionary <string, EditorAssetInfo> assetDic = new Dictionary <string, EditorAssetInfo>(); if (type == ExportType.IgnoreDirectoryStructureWithVersion || type == ExportType.KeepDirectoryStructureWithVersion) { for (int i = 0; i < buildAssets.Count; i++) { EditorAssetInfo asset = null; assetDic.TryGetValue(buildAssets[i].AssetBundleName, out asset); if (asset == null) { assetDic.Add(Path.GetFileName(buildAssets[i].AssetBundleName), buildAssets[i]); } } } for (int i = 0; i < platforms.Length; i++) { var platform = platforms[i].ToString(); var targetPath = FileHelper.pathSlashFix(Path.Combine(cachePath, platform)); // pick up all of the files of the current platform folder var files = FileHelper.AllFilesInDirectory(targetPath, "*"); if (!exportWithManifest) { files = files.Where(f => !Path.GetExtension(f.Name).Equals(".manifest")).ToList(); } var dstDir = FileHelper.pathSlashFix(Path.Combine(exportPath, platform)); if (!Directory.Exists(dstDir)) { Directory.CreateDirectory(dstDir); } for (int j = 0; j < files.Count; j++) { if (files[j].Name.Equals(platform)) { continue; } var fileName = Path.GetFileNameWithoutExtension(files[j].Name); switch (type) { case ExportType.IgnoreDirectoryStructure: { var src = FileHelper.pathSlashFix(files[j].Name); var dst = FileHelper.pathSlashFix(Path.Combine(dstDir, src.Replace(targetPath + "/", ""))); if (File.Exists(dst)) { File.Delete(dst); } FileUtil.CopyFileOrDirectory(files[j].FullName, dst); } break; case ExportType.KeepDirectoryStructure: { var src = FileHelper.pathSlashFix(files[j].FullName); var dst = FileHelper.pathSlashFix(Path.Combine(dstDir, src.Replace(targetPath + "/", ""))); FileHelper.CreateParentDirectory(dst); if (File.Exists(dst)) { File.Delete(dst); } FileUtil.CopyFileOrDirectory(src, dst); } break; case ExportType.IgnoreDirectoryStructureWithVersion: { EditorAssetInfo assetInfo; assetDic.TryGetValue(fileName, out assetInfo); if (assetInfo != null) { var src = FileHelper.pathSlashFix(files[j].Name); var dstDirWithVersion = FileHelper.pathSlashFix(Path.Combine(dstDir, assetInfo.Version.ToString())); var dst = FileHelper.pathSlashFix(Path.Combine(dstDirWithVersion, src.Replace(targetPath + "/", ""))); FileHelper.CreateParentDirectory(dst); if (File.Exists(dst)) { File.Delete(dst); } FileUtil.CopyFileOrDirectory(files[j].FullName, dst); } else { Debug.LogWarning("EasyAssetBundle: Unknown file. : " + fileName); } } break; case ExportType.KeepDirectoryStructureWithVersion: { EditorAssetInfo assetInfo; assetDic.TryGetValue(fileName, out assetInfo); if (assetInfo != null) { var src = FileHelper.pathSlashFix(files[j].FullName); var dstDirWithVersion = FileHelper.pathSlashFix(Path.Combine(dstDir, assetInfo.Version.ToString())); var dst = FileHelper.pathSlashFix(Path.Combine(dstDirWithVersion, src.Replace(targetPath + "/", ""))); FileHelper.CreateParentDirectory(dst); if (File.Exists(dst)) { File.Delete(dst); } FileUtil.CopyFileOrDirectory(src, dst); } else { Debug.LogWarning("EasyAssetBundle: Unknown file. :" + fileName); } } break; } } } }