IEnumerator RealLoadAssetBundle(AssetTask assetTask) { assetTask.abName = ALG.DecodeBundleName(assetTask.abName); var dependencies = _assetDependency.GetDependencies(ALG.EncodeBundleName(assetTask.abName)); var taskArray = new AssetTask[dependencies.Length]; for (var i = 0; i < dependencies.Length; i++) { var task = new AssetTask(dependencies[i], null, null, null, null); taskArray[i] = task; new Task(RealLoadAssetBundle(task), "AssetBundleManager_" + task.abName); } var j = 0; while (j < taskArray.Length) { if (taskArray[j].isFinish) { j++; } else { yield return(null); } } _assetBundleLoader.LoadAssetBundle(assetTask.abName, (AssetBundle ab) => { _assetBundleLoader.GetAssetBundle(assetTask.abName).AddReference(); assetTask.isFinish = true; }, null); while (!assetTask.isFinish) { yield return(null); } }
private void RealUnloadAssetWithName(string name) { name = ALG.DecodeBundleName(name); string[] dependencies = _assetDependency.GetDependencies(ALG.EncodeBundleName(name)); for (int i = 0; i < dependencies.Length; i++) { RealUnloadAssetWithName(dependencies[i]); } var abCache = _assetBundleLoader.GetAssetBundle(name); if (null == abCache) { return; } abCache.RemoveReference(); if (0 >= abCache.ReferencesCount) { releaseList.Add(abCache); } }