處理AB包的依賴問題(Unity)


創建一個依賴關系的類 存放依賴項和被引用項 

創建兩個字典儲存包 和 依賴關鍵  包名為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);

        }

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM