コード例 #1
0
    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;
                }
            }
        }
    }