創建一個依賴關系的類 存放依賴項和被引用項
創建兩個字典儲存包 和 依賴關鍵 包名為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);
}
