創建一個依賴關系的類 存放依賴項和被引用項
創建兩個字典儲存包 和 依賴關鍵 包名為key
然后就是遞歸加載 內部先處理好包依賴 最后統一加載
public IEnumerator LoadAssetBundle(string bundleName) { if (!_DicABRelation.ContainsKey(bundleName)) { _DicABRelation.Add(bundleName, new ABRelation(bundleName)); } yield return AddBundleDepend(bundleName); if (!_DicSingleABLoaderCache.ContainsKey(bundleName)) { Debug.Log("加載包 : "+bundleName); _CurrentSinglgABLoader = new SingleABLoader(bundleName, CompleteLoadAB); _DicSingleABLoaderCache.Add(bundleName, _CurrentSinglgABLoader); yield return _CurrentSinglgABLoader.LoadAssetBundle(); } } // 添加這個包所依賴其它包的信息 private IEnumerator AddBundleDepend(string bundleName) { var DependeInfo = ABManifestLoader.GetInstance().RetrivalDependce(bundleName); foreach (var dependBundleName in DependeInfo) { _DicABRelation[bundleName].AddDependence(dependBundleName); yield return AddBundleRefrence(bundleName,dependBundleName); } } // 添加這個包被引用的信息 private IEnumerator AddBundleRefrence(string bundleName, string dependBundleName) { if (!_DicABRelation.ContainsKey(dependBundleName)) { _DicABRelation.Add(dependBundleName, new ABRelation(dependBundleName)); Debug.Log("添加包引用 : "+ dependBundleName); yield return LoadAssetBundle(dependBundleName); } _DicABRelation[dependBundleName].AddReference(bundleName); }