public void Dispose() { curState = State.Prepare; assetName = null; abRef = null; if (dependRefList != null) { dependRefList.Clear(); dependRefList = null; } assetLoadCompleteCall = null; }
private void OnUnDependenciesBundle(string[] abs, string name) { if (abs == null) { return; } for (int i = 0; i < abs.Length; i++) { AssetBundleRef dependbundle = bundlesDic[abs[i]]; dependbundle.ReduceDepCount(name); } }
private void CollectDepend(AssetBundleRef abr, out List <AssetBundleRef> abList) { if (abr.dependencies == null || abr.dependencies.Length == 0) { abList = null; return; } else { abList = new List <AssetBundleRef>(); } for (int i = 0; i < abr.dependencies.Length; i++) { AssetBundleRef dependAB = bundlesDic[abr.dependencies[i]]; if (dependAB.assetBundle == null) { abList.Add(dependAB); } } }
public void GetAssetAsync(string bundleName, string assetName, Callback <UObject> callback) { if (!bundlesDic.ContainsKey(bundleName)) { DebugUtils.LogError(DebugUtils.Type.AssetBundle, string.Format("AssetBundle \"{0}\" for this platform not found", bundleName)); if (callback != null) { callback(null); } return; } AssetBundleRef assetBundleRef = bundlesDic[bundleName]; LoadingAssetBundleData loadData = new LoadingAssetBundleData(); loadData.assetName = assetName; loadData.abRef = assetBundleRef; CollectDepend(assetBundleRef, out loadData.dependRefList); loadData.assetLoadCompleteCall = callback; loadingBundleQueue.Enqueue(loadData); DebugUtils.Log(DebugUtils.Type.AssetBundle, string.Format("Prepare load bundle data \"{0}\" ,assetName is \"{1}\"", loadData.abRef.bundleName, loadData.assetName)); }
public T GetAsset <T>(string bundleName, string assetName) where T : UnityEngine.Object { if (!bundlesDic.ContainsKey(bundleName)) { DebugUtils.LogError(DebugUtils.Type.AssetBundle, string.Format("AssetBundle {0} for this platform not found", bundleName)); return(null); } AssetBundleRef assetBundleRef = bundlesDic[bundleName]; List <AssetBundleRef> dependbundleList = null; CollectDepend(assetBundleRef, out dependbundleList); int length = dependbundleList == null ? 0 : dependbundleList.Count; for (int i = 0; i < length; i++) { AssetBundleRef dependbundle = dependbundleList[i]; dependbundle.AddIncreaseDep(bundleName); if (dependbundle.assetBundle == null) { DebugUtils.Log(DebugUtils.Type.AssetBundle, "Start sync loading depend bundle : " + dependbundle.bundleName); string dependBundlePath = assetPath + CommonUtil.EncodingToMd5(dependbundleList[i].bundleName); dependbundle.assetBundle = AssetBundle.LoadFromFile(dependBundlePath); if (dependbundle.assetBundle == null) { DebugUtils.LogError(DebugUtils.Type.AssetBundle, string.Format("AssetBundle \"{0}\" for this platform not found, path : {1}", bundleName, dependBundlePath)); } else { DebugUtils.Log(DebugUtils.Type.AssetBundle, "Sync load depend bundle done, name is:" + dependbundle.bundleName); } #if UNITY_EDITOR RestAssetShader(dependbundle.assetBundle.LoadAllAssets()); #endif } } string bundlePath = assetPath + CommonUtil.EncodingToMd5(bundleName); if (assetBundleRef.assetBundle == null) { DebugUtils.Log(DebugUtils.Type.AssetBundle, "Start sync loading bundle : " + bundleName); assetBundleRef.assetBundle = AssetBundle.LoadFromFile(bundlePath); DebugUtils.Log(DebugUtils.Type.AssetBundle, "Sync load depend bundle done, name is:" + bundleName); } T asset = null; if (assetBundleRef.assetBundle == null) { DebugUtils.LogError(DebugUtils.Type.AssetBundle, string.Format("AssetBundle \"{0}\" for this platform not found, path : {1}", bundleName, bundlePath)); } else { asset = assetBundleRef.assetBundle.LoadAsset <T>(assetName); if (asset == null) { DebugUtils.LogError(DebugUtils.Type.AssetBundle, string.Format("AssetBundle \"{0}\" don't contain \"{1}\" resources, type:{2}", bundleName, assetName, typeof(T))); } else { #if UNITY_EDITOR RestAssetShader(new UObject[] { asset }); #endif assetBundleRef.AddRef(assetName); } } return(asset); }