static void BuildAssetBundles() { if (EditorApplication.isPlayingOrWillChangePlaymode) { Debug.LogError("Exit play mode before build AssetBundle!"); return; } AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup); AssetBundleBuildConfig config = LoadAssetAtPath <AssetBundleBuildConfig>(savePath); if (config == null) { return; } ABBuilder builder = new AssetBundleBuilder5x(new AssetBundlePathResolver()); builder.SetDataWriter(config.depInfoFileFormat == AssetBundleBuildConfig.Format.Text ? new AssetBundleDataWriter() : new AssetBundleDataBinaryWriter()); builder.Begin(); for (int i = 0; i < config.filters.Count; i++) { AssetBundleFilter f = config.filters[i]; if (f.valid) { builder.AddRootTargets(new DirectoryInfo(f.path), f.packMode, f.filter); } } AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup); builder.Export(); AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup); builder.End(); AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup); }
public void ExportImp() { AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup); List <AssetBundleBuild> list = new List <AssetBundleBuild>(); //标记所有 asset bundle name var all = AssetBundleUtils.GetAll(); var abAssets = new Dictionary <string, HashSet <AssetTarget> >(); for (int i = 0; i < all.Count; i++) { AssetTarget target = all[i]; if (target.needSelfExport) { if (!abAssets.ContainsKey(target.abFileName)) { abAssets.Add(target.abFileName, new HashSet <AssetTarget>()); } abAssets[target.abFileName].Add(target); AssetBundleBuild build = new AssetBundleBuild(); build.assetBundleName = target.abFileName; build.assetNames = new string[] { target.assetPath }; list.Add(build); } } AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup); //开始打包 BuildAssetBundleOptions buildOptions = BuildAssetBundleOptions.DeterministicAssetBundle | BuildAssetBundleOptions.ChunkBasedCompression | BuildAssetBundleOptions.DisableWriteTypeTree; BuildPipeline.BuildAssetBundles(pathResolver.BundleSavePath, list.ToArray(), buildOptions, EditorUserBuildSettings.activeBuildTarget); AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup); AssetBundle ab = AssetBundle.LoadFromFile(pathResolver.BundleSavePath + "/AssetBundles"); AssetBundleManifest manifest = ab.LoadAsset("AssetBundleManifest") as AssetBundleManifest; //hash for (int i = 0; i < all.Count; i++) { AssetTarget target = all[i]; if (target.needSelfExport) { Hash128 hash = manifest.GetAssetBundleHash(target.abFileName); target.bundleCrc = hash.ToString(); } } this.SaveDepAll(all, manifest, abAssets); this.RemoveUnused(all, manifest); ab.Unload(true); AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup); AssetDatabase.RemoveUnusedAssetBundleNames(); AssetDatabase.Refresh(); AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup); }
protected override IEnumerator LoadFromPackage() { //兼容低版本API #if UNITY_4 || UNITY_4_6 || UNITY_5_1 || UNITY_5_2 _bundle = AssetBundle.CreateFromFile(_assetBundleSourceFile); yield return(null); #else _assetBundleSourceFile = bundleManager.pathResolver.GetBundleSourceFile(bundleName, false); AssetBundleCreateRequest req = AssetBundle.LoadFromFileAsync(_assetBundleSourceFile); AssetBundleManager.Log("Load begin: " + bundleData.debugName); yield return(req); _bundle = req.assetBundle; #endif this.Complete(); }
/// <summary> /// 从已缓存的文件里加载 /// </summary> /// <returns></returns> protected virtual IEnumerator LoadFromCachedFile() { if (state != LoadState.State_Error) { //兼容低版本API #if UNITY_4 || UNITY_4_6 || UNITY_5_1 || UNITY_5_2 _bundle = AssetBundle.CreateFromFile(_assetBundleCachedFile); yield return(null); #else AssetBundleCreateRequest req = AssetBundle.LoadFromFileAsync(_assetBundleCachedFile); AssetBundleManager.Log("Load begin: " + bundleData.debugName); yield return(req); _bundle = req.assetBundle; #endif this.Complete(); } }