// Returns true if more Update calls are required. public override bool Update() { if (m_Request != null) { return(false); } LoadedWWW bundle = AssetManager.GetLoadedAssetBundle(m_AssetBundleName, out m_DownloadingError); if (bundle != null) { ///@TODO: When asset bundle download fails this throws an exception... if (m_loadall) { m_Request = bundle.m_AssetBundle.LoadAllAssetsAsync(); } else { m_Request = bundle.m_AssetBundle.LoadAssetAsync(m_AssetName, m_Type); } return(false); } else { return(!IsDone()); } }
public override bool Update() { if (m_Request != null) { return(false); } LoadedWWW bundle = AssetManager.GetLoadedAssetBundle(m_AssetBundleName, out m_DownloadingError); if (bundle != null) { if (m_IsAdditive) { m_Request = SceneManager.LoadSceneAsync(m_LevelName, LoadSceneMode.Additive); } else { m_Request = SceneManager.LoadSceneAsync(m_LevelName, LoadSceneMode.Single); } // AssetBundleManager.UnloadAssetBundle(m_AssetBundleName); return(false); } else { return(!IsDone()); } }
static protected void UnloadAssetBundleInternal(string assetBundleName) { string error; LoadedWWW bundle = GetLoadedAssetBundle(assetBundleName, out error); if (bundle == null) { return; } if (--bundle.m_ReferencedCount == 0) { if (bundle.m_AssetBundle != null) { bundle.m_AssetBundle.Unload(false); } else { bundle.m_normalres = null; Debug.LogError("LLLLLLLLLLLLLLLLLLLLLLL"); //普通资源清掉 } m_LoadedAssetBundles.Remove(assetBundleName); Log(LogType.Info, assetBundleName + " has been unloaded successfully"); } }
// Get loaded AssetBundle, only return vaild object when all the dependencies are downloaded successfully. static public LoadedWWW GetLoadedAssetBundle (string assetBundleName, out string error) { if (m_DownloadingErrors.TryGetValue(assetBundleName, out error) ) return null; LoadedWWW bundle = null; m_LoadedAssetBundles.TryGetValue(assetBundleName, out bundle); if (bundle == null) return null; // No dependencies are recorded, only the bundle itself is required. string[] dependencies = null; if (!m_Dependencies.TryGetValue(assetBundleName, out dependencies) ) return bundle; // Make sure all dependencies are loaded foreach(var dependency in dependencies) { if (m_DownloadingErrors.TryGetValue(assetBundleName, out error) ) return bundle; // Wait all the dependent assetBundles being loaded. LoadedWWW dependentBundle; m_LoadedAssetBundles.TryGetValue(dependency, out dependentBundle); if (dependentBundle == null) return null; } return bundle; }
// Where we actuall call WWW to download the assetBundle. static protected bool LoadResInternal (string assetBundleName, EResType t, bool isLoadingAssetBundleManifest) { // Already loaded. LoadedWWW bundle = null; m_LoadedAssetBundles.TryGetValue(assetBundleName, out bundle); if (bundle != null) { bundle.m_ReferencedCount++; return true; } // @TODO: Do we need to consider the referenced count of WWWs? // In the demo, we never have duplicate WWWs as we wait LoadAssetAsync()/LoadLevelAsync() to be finished before calling another LoadAssetAsync()/LoadLevelAsync(). // But in the real case, users can call LoadAssetAsync()/LoadLevelAsync() several times then wait them to be finished which might have duplicate WWWs. if (m_DownloadingWWWs.ContainsKey(assetBundleName) ) return true; WWW download = null; string url = null; switch (t) { case EResType.E_AssetBundle: url = m_BaseDownloadingURL + "/assetbundle/" +assetBundleName; break; case EResType.E_TEXTURE: url = m_BaseDownloadingURL + "/texture/" +assetBundleName; break; case EResType.E_BYTE: url = m_BaseDownloadingURL + "/config/" + assetBundleName; break; case EResType.E_TXT: url = m_BaseDownloadingURL + "/config/" + assetBundleName; break; case EResType.E_AudioClip: url = m_BaseDownloadingURL + "/sound/" + assetBundleName; break; default: break; } //Debug.Log(url); // For manifest assetbundle, always download it as we don't have hash for it. if (isLoadingAssetBundleManifest) download = new WWW(url); else { //yadoutodo // download = WWW.LoadFromCacheOrDownload(url, m_AssetBundleManifest.GetAssetBundleHash(assetBundleName), 0); download = new WWW(url); } m_DownloadingWWWs.Add(assetBundleName, new WWWLoadInfo(download,t)); return false; }
public override bool Update() { m_loaded = AssetManager.GetLoadedAssetBundle(m_texturename, out m_DownloadingError); if (m_loaded != null) { return(false); } else { return(!IsDone()); } }
static public void UnloadNormalRes(string resname) { LoadedWWW load = null; if(m_LoadedAssetBundles.TryGetValue(resname,out load)) { if (null != load.m_normalres) { load.m_normalres.Distory(); } m_LoadedAssetBundles.Remove(resname); } }