protected static void UnloadAssetBundleInternal(string assetBundleName) { string text; LoadedAssetBundle loadedAssetBundle = AssetBundleManager.GetLoadedAssetBundle(assetBundleName, out text); if (loadedAssetBundle == null) { return; } if (--loadedAssetBundle.m_ReferencedCount == 0) { AssetBundleManager.m_LoadedAssetBundles.Remove(assetBundleName); if (!AssetBundleManager.m_ToUnloadAssetBundles.ContainsKey(assetBundleName)) { AssetBundleManager.m_ToUnloadAssetBundles.Add(assetBundleName, loadedAssetBundle); } AssetBundleManager.UnloadDependencies(assetBundleName); } }
private void Update() { this.keysToRemove.Clear(); foreach (KeyValuePair <string, LoadedAssetBundle> keyValuePair in AssetBundleManager.m_ToUnloadAssetBundles) { if (keyValuePair.Value != null && ++keyValuePair.Value.m_UnloadTicks >= 60) { keyValuePair.Value.m_AssetBundle.Unload(true); this.keysToRemove.Add(keyValuePair.Key); } } for (int i = 0; i < this.keysToRemove.Count; i++) { string key = this.keysToRemove[i]; AssetBundleManager.m_ToUnloadAssetBundles.Remove(key); } this.keysToRemove.Clear(); foreach (KeyValuePair <string, AssetBundleCreateRequest> keyValuePair2 in AssetBundleManager.m_DownloadingReqs) { AssetBundleCreateRequest value = keyValuePair2.Value; if (value.isDone) { AssetBundle assetBundle = value.assetBundle; if (assetBundle == null) { if (!AssetBundleManager.m_DownloadingErrors.ContainsKey(keyValuePair2.Key)) { AssetBundleManager.m_DownloadingErrors.Add(keyValuePair2.Key, string.Format("{0} is not a valid asset bundle.", keyValuePair2.Key)); } this.keysToRemove.Add(keyValuePair2.Key); } else { int num = AssetBundleManager.m_DownloadingTicks[keyValuePair2.Key]; if (num > 0) { AssetBundleManager.m_LoadedAssetBundles.Add(keyValuePair2.Key, new LoadedAssetBundle(assetBundle, num)); } else { assetBundle.Unload(true); AssetBundleManager.UnloadDependencies(keyValuePair2.Key); for (int j = AssetBundleManager.m_InProgressOperations.Count - 1; j >= 0; j--) { if (AssetBundleManager.m_InProgressOperations[j].MatchBundle(keyValuePair2.Key)) { AssetBundleManager.m_InProgressOperations[j].Abort(); AssetBundleManager.m_InProgressOperations.RemoveAt(j); } } } this.keysToRemove.Add(keyValuePair2.Key); } } } foreach (string key2 in this.keysToRemove) { AssetBundleManager.m_DownloadingReqs.Remove(key2); AssetBundleManager.m_DownloadingTicks.Remove(key2); } int k = 0; while (k < AssetBundleManager.m_InProgressOperations.Count) { if (!AssetBundleManager.m_InProgressOperations[k].Update()) { AssetBundleManager.m_InProgressOperations.RemoveAt(k); } else { k++; } } }