bool UnloadAssetBundle(string path, bool force = false) { var cachePath = path.ToLower(); var loadedAssetBundle = this.TryGetLoadedAssetBundle(cachePath); if (loadedAssetBundle == null) { return(false); } var isManifest = path == ResConfig.MAINIFEST; var bundleName = isManifest ? path : ResConfig.ConvertToBundleName(path) + ResConfig.BUNDLE_EXTENSION; // Try unload bundle assets, and remove from cache if (force) { loadedAssetBundle.ReferencedCount = 0; } else { loadedAssetBundle.ReferencedCount--; } // Check referencedCount var unload = false; if (loadedAssetBundle.ReferencedCount <= 0) { unload = true; loadedAssetBundle.Unload(); _assetBundles.Remove(cachePath); this.DebugDeallocBundle(cachePath); if (isManifest) { _manifest = null; } } // Try unload depenceBundle if (unload == true && _dependenceInfos.ContainsKey(bundleName)) { var dependencies = _dependenceInfos[bundleName]; for (var i = 0; i < dependencies.Length; ++i) { var dependencePath = ResConfig.ReverseFromBundleName(dependencies[i]); this.UnloadAssetBundle(dependencePath, force); } _dependenceInfos.Remove(bundleName); } return(true); }
LoadedAssetBundle LoadAssetBundle(string path, bool isDependence = false) { this.EnsureManifest(); var cachePath = path.ToLower(); var loadedAssetBundle = this.TryGetLoadedAssetBundle(cachePath); if (loadedAssetBundle != null) { loadedAssetBundle.ReferencedCount++; return(loadedAssetBundle); } var isManifest = path == ResConfig.MAINIFEST; var bundleName = isManifest ? path : ResConfig.ConvertToBundleName(path) + ResConfig.BUNDLE_EXTENSION; // Load dependencies if (isDependence == false) { var dependencies = this.GetDependencies(bundleName, path); for (var i = 0; i < dependencies.Length; ++i) { var dependencePath = ResConfig.ReverseFromBundleName(dependencies[i]); var dependenceBundle = this.LoadAssetBundle(dependencePath, true); if (dependenceBundle == null) { LogManager.Error(string.Format( "ResManager::LoadAssetFromBundle error, dependence({0}) is null!", dependencePath )); } } } // Load & cache assetBundle loadedAssetBundle = new LoadedAssetBundle(path, bundleName); loadedAssetBundle.ReferencedCount = 1; _assetBundles.Add(cachePath, loadedAssetBundle); this.DebugAllocBundle(cachePath); return(loadedAssetBundle); }