//データをバージョンアップする(Eidtor上のみ使用可能) public int EditorVersionUpAssetBundle(AssetBundleManifest manifest, UnityEditor.BuildTarget buildTarget) { int count = 0; string buildTargetKey = AssetBundleHelper.BuildTargetToBuildTargetFlag(buildTarget).ToString(); ConvertFileInfoDictionary oldInfoList; FileLists.TryGetValue(buildTargetKey, out oldInfoList); ConvertFileInfoDictionary newInfoList = new ConvertFileInfoDictionary(this, buildTargetKey); foreach (string assetBundleName in manifest.GetAllAssetBundles()) { ConvertFileInfo info; if (oldInfoList != null && oldInfoList.TryGetValue(assetBundleName, out info)) { if (info.VersionUp(manifest)) { ++count; } } else { info = new ConvertFileInfo(assetBundleName, manifest, newInfoList); ++count; } newInfoList.Add(info.Name, info); } FileLists.Remove(newInfoList.Key); FileLists.Add(newInfoList.Key, newInfoList); return(count); }
//アセットバンドルのビルド void BuildAssetBundles(FileIOManager fileIOManager) { if (buildMode == AssetBundleBuildMode.None) { return; } //アセットバンドルをプラットフォーム別にビルド List <BuildTarget> buildTargets = new List <BuildTarget>(); switch (buildMode) { case AssetBundleBuildMode.OnlyEditor: //エディタ上のみ buildTargets.Add(AssetBundleHelper.BuildTargetFlagToBuildTarget(AssetBundleHelper.EditorAssetBundleTarget())); break; case AssetBundleBuildMode.AllPlatform: //全プラットフォーム { buildTargets = AssetBundleHelper.BuildTargetFlagsToBuildTargetList(buildTargetFlags); } break; default: break; } MainAssetInfo inputDirAsset = new MainAssetInfo(this.ResourcesDirectory); List <MainAssetInfo> assets = GetAssetBudleList(inputDirAsset); RenameAssetBundles(inputDirAsset.AssetPath, assets); AssetBundleBuild[] builds = ToAssetBundleBuilds(assets); if (builds.Length <= 0) { return; } foreach (BuildTarget buildTarget in buildTargets) { string outputPath = FilePathUtil.Combine(OutputPath, AssetBundleHelper.BuildTargetToBuildTargetFlag(buildTarget).ToString()); //出力先のディレクトリを作成 if (!Directory.Exists(outputPath)) { Directory.CreateDirectory(outputPath); } //アセットバンドルを作成 AssetBundleManifest manifest = BuildPipeline.BuildAssetBundles(outputPath, builds, buildOptions, buildTarget); Debug.Log("BuildAssetBundles to " + buildTarget.ToString()); if (isOutputLog) { WriteManifestLog(manifest, outputPath); } } }
//アセットバンドルマニフェストのロード IEnumerator LoadAssetBundleManifestAsync(bool fromCache, Action onFailed) { if (Strage == StrageType.Local) { //ローカルなら必要ない yield break; } // マニフェストファイルをロードする // マニフェストファイルは // 「ルートパス/プラッフォーム名にある if (fromCache) { yield return(AssetFileManager.GetInstance().AssetBundleInfoManager.LoadCacheManifestAsync( GetDynamicStrageRoot(), AssetBundleHelper.RuntimeAssetBundleTarget().ToString(), //onComplete () => { }, //onFailed () => { onFailed(); } )); } else { yield return(AssetFileManager.GetInstance().AssetBundleInfoManager.DownloadManifestAsync( FilePathUtil.Combine(GetDynamicStrageRoot(), this.RootResourceDir + "_Root"), // GetDynamicStrageRoot(), this.RootResourceDir + "_Root", // AssetBundleHelper.RuntimeAssetBundleTarget().ToString(), //onComplete () => { Debug.Log("[AdvEngineStarter] DownloadManifestAsync Success!!"); }, //onFailed () => { onFailed(); } )); } }
//アセットバンドルマニフェストのロード IEnumerator LoadAssetBundleManifestAsync(bool fromCache, Action onFailed) { if (Strage == StrageType.Local) { //ローカルなら必要ない yield break; } // マニフェストファイルをロードする // マニフェストファイルは // 「ルートパス/プラッフォーム名にある if (fromCache) { yield return(AssetFileManager.GetInstance().AssetBundleInfoManager.LoadCacheManifestAsync( GetDynamicStrageRoot(), AssetBundleHelper.RuntimeAssetBundleTarget().ToString(), //onComplete () => { }, //onFailed () => { onFailed(); } )); } else { yield return(AssetFileManager.GetInstance().AssetBundleInfoManager.DownloadManifestAsync( GetDynamicStrageRoot(), AssetBundleHelper.RuntimeAssetBundleTarget().ToString(), //onComplete () => { }, //onFailed () => { onFailed(); } )); } }
//ルートパスを取得 string GetDynamicStrageRoot() { switch (Strage) { case StrageType.Server: case StrageType.ServerAndLocalScenario: case StrageType.LocalAndServerScenario: return(FilePathUtil.Combine(this.ServerUrl, AssetBundleHelper.RuntimeAssetBundleTarget().ToString())); case StrageType.StreamingAssets: case StrageType.StreamingAssetsAndLocalScenario: string root = FilePathUtil.Combine(this.RootResourceDir, AssetBundleHelper.RuntimeAssetBundleTarget().ToString()); return(FilePathUtil.ToStreamingAssetsPath(root)); default: Debug.LogError("UnDefine"); return(""); } }
public void LoadInitFileList(int version) { string dir = ResourceDir; bool useConvertFileList = ResourceLoadType == LoadType.Server ? useConvertFileListOnServer : useConvertFileListOnLocal; bool useAssetBundleFileList = ResourceLoadType == LoadType.Server ? useAssetBundleListOnServer : useAssetBundleListOnLocal; List <string> pathList = new List <string>(); if (useConvertFileList) { string path = FilePathUtil.Combine(dir, FilePathUtil.GetDirectoryNameOnly(ResourceDir + "/") + ExtensionUtil.ConvertFileList); pathList.Add(path); } if (useAssetBundleFileList) { string AssetBundleTarget = AssetBundleHelper.RuntimeAssetBundleTraget().ToString(); string assetBundlePath = FilePathUtil.Combine(AssetBundleTarget, AssetBundleTarget + ExtensionUtil.ConvertFileList); string path = FilePathUtil.Combine(dir, assetBundlePath); pathList.Add(path); } AssetFileManager.LoadInitFileList(pathList, version); }
//ファイルのパスから、ファイル情報を取得 public bool TryGetValue(string filePath, AssetFileEncodeType encodeType, out ConvertFileInfo info) { info = null; switch (encodeType) { case AssetFileEncodeType.AlreadyEncoded: if (!FilePathUtil.IsUnderDirectory(filePath, DirectoryPath)) { return(false); } string fileKey = FilePathUtil.RemoveDirectory(filePath, DirectoryPath); foreach (var files in FileLists.Values) { if (files.TryGetValue(fileKey, out info)) { return(true); } } return(false); case AssetFileEncodeType.AssetBundle: string assetName = FilePathUtil.GetFileNameWithoutExtension(filePath).ToLower(); string keyPlatform = AssetBundleHelper.RuntimeAssetBundleTraget().ToString(); ConvertFileInfoDictionary infoList; if (FileLists.TryGetValue(keyPlatform, out infoList)) { if (infoList.TryGetValue(assetName, out info)) { return(true); } } return(false); default: return(false); } }
//アセットバンドルのビルド void BuildAssetBundles(string outPutDirectoryPath, FileIOManager fileIOManager, AssetFileManagerSettings settings, bool isOutputLog) { if (assetBundleBuildMode == AssetBundleBuildMode.None) { return; } //アセットバンドルをプラットフォーム別にビルド List <BuildTarget> buildTargets = new List <BuildTarget>(); switch (assetBundleBuildMode) { case AssetBundleBuildMode.OnlyEditor: //エディタ上のみ buildTargets.Add(EditorUserBuildSettings.activeBuildTarget); break; case AssetBundleBuildMode.AllPlatform: //全プラットフォーム { buildTargets = AssetBundleHelper.BuildTargetFlagsToBuildTargetList(buildTargetFlags); } break; default: break; } List <MainAssetInfo> assets = GetAssetBudleList(settings); RenameAssetBundles(assets); AssetBundleBuild[] builds = ToAssetBundleBuilds(assets); if (builds.Length <= 0) { return; } foreach (BuildTarget buildTarget in buildTargets) { string outputPath = FilePathUtil.Combine(outPutDirectoryPath, AssetBundleHelper.BuildTargetToBuildTargetFlag(buildTarget).ToString()); //出力先のディレクトリを作成 if (!Directory.Exists(outputPath)) { Directory.CreateDirectory(outputPath); } //アセットバンドルを作成 AssetBundleManifest manifest = BuildPipeline.BuildAssetBundles(outputPath, builds, BuildAssetBundleOptions.None, buildTarget); //アセットバンドルの情報をバージョンアップ AdvFileListConverter converter = new AdvFileListConverter(outputPath, fileIOManager, settings); converter.VersionUp( (x) => { int count = x.ConvertFileList.EditorVersionUpAssetBundle(manifest, buildTarget); Debug.Log("" + count + " AsseBundle version up to target " + buildTarget.ToString()); }); if (isOutputLog) { converter.WriteLog(true); } } }