public void UnloadOneBundle(string bundleId, bool unloadAll) { if (_bundlesMap.ContainsKey(bundleId)) { BundleInfo bundleInfo = _bundlesMap[bundleId]; if (bundleInfo.Bundle != null) { AssetBundlesDatabase.BundleData bundleData = bundleInfo.Data; foreach (var sceneName in bundleData.SceneNames) { if (bundleInfo.Bundle == _scenesMap[sceneName].Bundle) { _scenesMap.Remove(sceneName); } } foreach (var assetId in bundleData.AssetsIds) { _assetIdMap.Remove(assetId); } _bundlesMap.Remove(bundleId); bundleInfo.Bundle.Unload(unloadAll); bundleInfo.Bundle = null; Resources.UnloadUnusedAssets(); GC.Collect(); } } }
public AssetBundlesDatabase.BundleData AddSceneBundle(string name, byte[] hash, int level, string[] sceneNames, string bundlePath) { var bundle = new AssetBundlesDatabase.BundleData(); bundle.Name = name; bundle.SceneNames = sceneNames; bundle.DataLevel = level; AddToDatabase(bundle, hash, bundlePath); return(bundle); }
public AssetBundlesDatabase.BundleData AddBundle(string name, byte[] hash, int level, string bundlePath, List <string> assetIds) { var bundle = new AssetBundlesDatabase.BundleData(); bundle.Name = name; bundle.AssetsIds = assetIds; bundle.DataLevel = level; AddToDatabase(bundle, hash, bundlePath); return(bundle); }
public IEnumerator DoLoadOneBundle(string bundleId) { AssetBundlesDatabase database = LoadAssetBundlesDatabaseFromId(_lastRunDatabaseId); AssetBundlesDatabase.BundleData bundleData = null; foreach (var bData in database.Bundles) { if (bData.Name == bundleId) { bundleData = bData; break; } } if (bundleData != null) { BundleInfo bundleInfo = new BundleInfo(bundleData); int version = CachingUtils.GetVersionFromHash(bundleData.Hash); string databaseId = _latestDatabaseId; string url = UpdateUrl + "/" + databaseId + "/"; using (var www = WWW.LoadFromCacheOrDownload(url + bundleData.Filename, version)) { yield return(www); bundleInfo.Bundle = www.assetBundle; } foreach (var sceneName in bundleData.SceneNames) { _scenesMap.Add(sceneName, bundleInfo); } foreach (var assetId in bundleData.AssetsIds) { _assetIdMap[assetId] = bundleInfo; } _bundlesMap.Add(bundleData.Name, bundleInfo); } }
private void AddToDatabase(AssetBundlesDatabase.BundleData bundle, byte[] hash, string bundlePath) { bundle.Filename = Path.GetFileName(bundlePath); using (FileStream stream = File.OpenRead(bundlePath)) { bundle.Size = (int)stream.Length; bundle.Hash = hash; var str = bundle.Filename + "@" + CachingUtils.GetVersionFromHash(bundle.Hash); bundle.CacheName = BuildUtils.ToHexString(BuildUtils.GetASCIIStringHash(str)); } _database.Bundles.Add(bundle); // Update hash, id and size _database.Hash = BuildUtils.Sha1.ComputeHash(_database.Hash.Concat(bundle.Hash).ToArray()); _database.Id = BuildUtils.ToHexString(_database.Hash.Take(4)); _database.Size += bundle.Size; //EditorUtility.SetDirty(_database); }
public BundleInfo(AssetBundlesDatabase.BundleData data) { Data = data; Bundle = null; }