public override void Export() { #region 源代码 base.Export(); var platform = PathResolver.GetPlatformName(); var filePath = Path.Combine(Path.Combine(Environment.CurrentDirectory, PathResolver.BundleSaveDirName), platform).Replace("\\", "/") + "/"; if (Directory.Exists(filePath)) { Directory.Delete(filePath, true); } Directory.CreateDirectory(filePath); List <AssetBundleBuild> list = new List <AssetBundleBuild>(); //标记所有 asset bundle name var all = AssetBundleUtils.GetAll(); for (int i = 0; i < all.Count; i++) { AssetTarget target = all[i]; if (target.needSelfExport) { AssetBundleBuild build = new AssetBundleBuild(); build.assetBundleName = target.bundleName; build.assetNames = new string[] { target.assetPath }; list.Add(build); } } //开始打包 BuildPipeline.BuildAssetBundles( PathResolver.BundleSavePath, list.ToArray(), BuildAssetBundleOptions.ChunkBasedCompression | BuildAssetBundleOptions.DeterministicAssetBundle, EditorUserBuildSettings.activeBuildTarget); #if UNITY_5_1 || UNITY_5_2 AssetBundle ab = AssetBundle.CreateFromFile(PathResolver.BundleSavePath + PathResolver.GetPlatformForAssetBundles(Application.platform)); #else var ab = AssetBundle.LoadFromFile(PathResolver.BundleSavePath + "/" + PathResolver.GetPlatformName()); #endif var 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.bundleName); target.bundleCrc = hash.ToString(); } } this.SaveDepAll(all); this.SaveSpriteAll(all); this.SaveAssetAll(all); this.ExportResourcesManifestFile(manifest); ab.Unload(true); this.RemoveUnused(all); AssetDatabase.RemoveUnusedAssetBundleNames(); AssetDatabase.Refresh(); Debug.Log("[Assets]Build Finish!"); #endregion }
/// <summary> /// 分析引用关系 /// </summary> public void Analyze() { if (_isAnalyzed) { return; } _isAnalyzed = true; #if !UNITY_5 LoadMetaHashIfNecessary(); #endif _cacheInfo = AssetBundleUtils.GetCacheInfo(assetPath); _isFileChanged = _cacheInfo == null || !_cacheInfo.fileHash.Equals(GetHash()) || !_cacheInfo.metaHash.Equals(_metaHash); if (_cacheInfo != null) { _bundleCrc = _cacheInfo.bundleCrc; if (_isFileChanged) { Debug.Log("File was changed : " + assetPath); } } Object[] deps = EditorUtility.CollectDependencies(new Object[] { asset }); #if UNITY_5 || UNITY_2017_1_OR_NEWER List <Object> depList = new List <Object>(); for (int i = 0; i < deps.Length; i++) { Object o = deps[i]; //不包含脚本对象 //不包含LightingDataAsset对象 if (o is MonoScript || o is LightingDataAsset) { continue; } //不包含builtin对象 string path = AssetDatabase.GetAssetPath(o); if (path.StartsWith("Resources")) { continue; } depList.Add(o); } deps = depList.ToArray(); #else //提取 resource.builtin for (int i = 0; i < deps.Length; i++) { Object dep = deps[i]; string path = AssetDatabase.GetAssetPath(dep); if (path.StartsWith("Resources")) { AssetTarget builtinAsset = AssetBundleUtils.Load(dep); this.AddDependParent(builtinAsset); builtinAsset.Analyze(); } } #endif var res = from s in deps let obj = AssetDatabase.GetAssetPath(s) select obj; var paths = res.Distinct().ToArray(); for (int i = 0; i < paths.Length; i++) { if (File.Exists(paths[i]) == false) { //Debug.Log("invalid:" + paths[i]); continue; } FileInfo fi = new FileInfo(paths[i]); AssetTarget target = AssetBundleUtils.Load(fi); if (target == null) { continue; } this.AddDependParent(target); target.Analyze(); } }
public void Begin() { EditorUtility.DisplayProgressBar("Loading", "Loading...", 0.1f); AssetBundleUtils.Init(); }