/// <summary> /// 初始化manifestAsset。方便直接读取 /// </summary> private static void InitManifest(MyBundle bundle = null) { #if UNITY_EDITOR //直接读取项目资源 if (FrameworkDefaultSetting.useEditorPrefab) { string path = BuildDefaultPath.GetManifestAssetPath(); var manifestAsset = UnityEditor.AssetDatabase.LoadAssetAtPath <PackageManifest>(path); manifestAsset.MapingAssetData(); manifest.Load(manifestAsset); } else //从Bundle中读取 { if (bundle == null) { Console.WriteLine("从Bundle中读取Manifest失败!!!!"); return; } var manifestAsset = bundle.LoadAsset <PackageManifest>(RuntimeResPath.GetManifestAssetPath); manifestAsset.MapingAssetData(); manifest.Load(manifestAsset); } #else if (bundle == null) { Console.WriteLine("从Bundle中读取Manifest失败!!!!"); return; } var manifestAsset = bundle.LoadAsset <PackageManifest>(RuntimeResPath.GetManifestAssetPath); manifestAsset.MapingAssetData(); manifest.Load(manifestAsset); #endif }
protected override void OnUnload() { if (bundle != null) { bundle.Release(); //减少依赖 } bundle = null; //清除引用 }
static void UnLoadDependencies(MyBundle bundle) { foreach (var item in bundle.dependencies) { item.Release(); } bundle.dependencies.Clear(); }
static void LoadDependencies(MyBundle bundle, string assetBundleName, bool asyncRequest) { var dependencies = manifest.GetAllDependencies(assetBundleName); if (dependencies.Length > 0) { foreach (var item in dependencies) { bundle.dependencies.Add(LoadInternal(item, false, asyncRequest)); } } }
static MyBundle LoadInternal(string assetBundleName, bool isLoadingAssetBundleManifest, bool asyncRequest) { if (!isLoadingAssetBundleManifest) { if (manifest == null) { MyDebug.LogErrorFormat("Please initialize AssetBundleManifest by calling Bundles.Initialize()"); return(null); } } var url = GetDataPath() + assetBundleName; MyBundle bundle = null; if (!bundles.TryGetValue(assetBundleName, out bundle)) { var hash = isLoadingAssetBundleManifest ? new Hash128(1, 0, 0, 0) : manifest.GetAssetBundleHash(assetBundleName); if (bundle == null) { if (url.StartsWith("file://")) { bundle = new MyBundleWWW(url, hash); //启动WWW下载 } else { if (asyncRequest) //是否开启异步 { bundle = new MyBundleAsync(url, hash); } else { bundle = new MyBundle(url, hash); //同步下载 } } bundle.name = assetBundleName; bundles.Add(assetBundleName, bundle); bundle.Load(); //开始下载 if (!isLoadingAssetBundleManifest) //Bundle下载完成之后 加载对应依赖 { LoadDependencies(bundle, assetBundleName, asyncRequest); } } } bundle.Retain(); return(bundle); }
protected override void OnLoad() { bundle = MyBundles.Load(MyAssets.GetBundleByAssetName(assetName)); asset = bundle.LoadAsset(MyAssets.GetAssetPathByAssetName(assetName), assetType); }