/// <summary> /// 加载AssetBundle的方法 /// </summary> /// <param name="abName">要加载AssetBundle的名称</param> /// <returns></returns> public IEnumerator LoadAssetBundle(string abName) { // AssetBundle关系的建立 if (!_relationDict.ContainsKey(abName)) { AssetBundleRelation relation = new AssetBundleRelation(abName); _relationDict.Add(abName, relation); } AssetBundleRelation tmpRelation = _relationDict[abName]; // 获得所有的依赖关系 string[] depend = AssetBundleManifestLoader.GetInstance().RetrivalDepend(abName); foreach (string itemDepend in depend) { tmpRelation.AddDepend(itemDepend); // 添加依赖项 yield return LoadReference(itemDepend, abName); // 添加引用项 } // 进行AssetBundle加载 if (_loaderCacheDict.ContainsKey(abName)) { // 加载过了 yield return _loaderCacheDict[abName].LoadABWWW(); // 加载AssetBundle } else { _currSingleAssetBundleLoader = new SingleAssetBundleLoader(abName, CompleteLoadSingle); _loaderCacheDict.Add(abName, _currSingleAssetBundleLoader); yield return _currSingleAssetBundleLoader.LoadABWWW(); } yield return null; }
/// <summary> /// 添加引用AssetBundle /// </summary> /// <param name="abName">AssetBundle名称</param> /// <param name="refAbName">被引用的AssetBundle名称</param> /// <returns></returns> private IEnumerator LoadReference(string abName, string refAbName) { if (_relationDict.ContainsKey(abName)) { // AssetBundle已经加载 AssetBundleRelation tmpRelation = _relationDict[abName]; tmpRelation.AddReference(refAbName); // 添加引用关系 } else { AssetBundleRelation tmpRelation = new AssetBundleRelation(abName); tmpRelation.AddReference(refAbName); _relationDict.Add(abName, tmpRelation); yield return LoadAssetBundle(abName); // 加载依赖包 } yield return null; }