public void AddDependABProxy(ABProxy abProxy) { if (abSet == null) { abSet = new HashSet <ABProxy>(); } abSet.Add(abProxy); }
/// <summary> /// 强制卸载一个ABProxy /// </summary> /// <param name="abName"></param> /// <param name="isABUnload">是否AB已经被卸载了, 如果已经被卸载, proxy就不再次卸载ab</param> public void UnloadABProxy(string abName) { ABProxy abProxy = this.GetABProxy(abName); if (abProxy != null) { abProxy.Dispose(); this.abDict.Remove(abName); } }
/// <summary> /// 卸载一个Asset /// </summary> /// <param name="abName"></param> /// <param name="uo"></param> /// <returns></returns> public bool UnloadAsset(string abName, UnityEngine.Object uo) { ABProxy abProxy = GetABProxy(abName); if (abProxy == null) { return(false); } abProxy.UnloadAsset(uo); return(true); }
IEnumerator PrepareLoad(string sceneName_pre, string sceneName) { #if UNITY_EDITOR && !AB_MODE #else var resMgr = ResMgr.inst; //清除ab if (sceneName_pre != null && sceneName_pre != "" && sceneName_pre != EMPTY_SCENE) { string abName_pre = ResHelper.GetABName(sceneName); ABProxy abProxy = resMgr.GetABProxy(abName_pre); if (abProxy != null) { //清除ab abProxy.isResident = false; } } //加载ab if (sceneName != null && sceneName != "" && sceneName != EMPTY_SCENE) { string abName = ResHelper.GetABName(sceneName); bool abfinish = false; resMgr.LoadABProxy(abName, (abProxy) => { abProxy.isResident = true; abfinish = true; }); while (true) { if (abfinish) { break; } yield return(null); } } //清理资源 bool finish = false; ResMgr.inst.UnloadUnused(() => { finish = true; }); while (true) { if (finish == true) { break; } yield return(null); } #endif yield break; }
/// <summary> /// 卸载一个Prefab /// </summary> /// <param name="abName"></param> /// <param name="go"></param> /// <returns></returns> public bool UnloadPrefab(string abName, GameObject go) { ABProxy abProxy = GetABProxy(abName); if (abProxy == null) { return(false); } abProxy.UnloadPrefab(go); return(true); }
/// <summary> /// 加载一个AbProxy /// </summary> /// <param name="abName"></param> /// <param name="fcallback"></param> /// <returns></returns> private IEnumerator LoadABProxyCor(string abName, System.Action <ABProxy> fcallback = null) { ABProxy abProxy = GetOrCreateABProxy(abName); if (!abProxy.isReady) { abProxy.AddRef(); yield return(LoadABProxySync(abProxy)); abProxy.RemoveRef(); } fcallback(abProxy); yield break; }
/// <summary> /// 加载SubAssets协程版 /// </summary> /// <param name="abName"></param> /// <param name="assetName"></param> /// <param name="type"></param> /// <param name="callback"></param> /// <returns></returns> private IEnumerator LoadSubAssetsCor(string abName, string assetName, Type type, System.Action <UnityEngine.Object[]> callback) { //读取abProxy ABProxy abProxy = GetOrCreateABProxy(abName); if (!abProxy.isReady) { abProxy.AddRef(); yield return(LoadABProxySync(abProxy)); abProxy.RemoveRef(); } //这里以后考虑改为LoadAssetSync UnityEngine.Object[] objArray = abProxy.LoadSubAssets(assetName, type); callback(objArray); yield break; }
/// <summary> /// 指定类型加载所有asset协程 /// </summary> /// <param name="abName"></param> /// <param name="fcallback"></param> /// <returns></returns> private IEnumerator LoadAllAssetCor(string abName, System.Action <UnityEngine.Object[]> fcallback) { //读取abProxy ABProxy abProxy = GetOrCreateABProxy(abName); if (!abProxy.isReady) { abProxy.AddRef(); yield return(LoadABProxySync(abProxy)); abProxy.RemoveRef(); } //这里以后考虑改为LoadAssetSync UnityEngine.Object[] go = abProxy.LoadAllAsset(); fcallback(go); yield break; }
/// <summary> /// 加载一个Prefab /// </summary> /// <param name="abName">ab名字</param> /// <param name="assetName">asset名字</param> /// <param name="fcallback">完成回调</param> private IEnumerator LoadPrefabCor(string abName, string assetName, System.Action <GameObject> fcallback) { //读取abProxy ABProxy abProxy = GetOrCreateABProxy(abName); if (!abProxy.isReady) { abProxy.AddRef(); yield return(LoadABProxySync(abProxy)); abProxy.RemoveRef(); } //这里可以改为LoadPrefabSync GameObject go = abProxy.LoadPrefab(assetName); fcallback(go); yield break; }
public ABProxy GetOrCreateABProxy(string abName) { ABProxy abProxy = this.GetABProxy(abName); if (abProxy == null) { //主体 abProxy = new ABProxy(this, abName); this.abDict.Add(abName, abProxy); this.abRequestManager.AddAbRequest(abName); //依赖项 string[] dependABNameArray = this.GetManifest().GetAllDependencies(abName); for (int i = 0; i < dependABNameArray.Length; i++) { string dependABName = dependABNameArray[i]; ABProxy dependABProxy = this.GetOrCreateABProxy(dependABName); abProxy.AddDependABProxy(dependABProxy); } } return(abProxy); }
/// <summary> /// 删除没有使用的 /// </summary> public void UnloadUnused() { this.sweepMark++; //标记 foreach (var item in abDict) { ABProxy abProxy = item.Value; abProxy.Mark(this.sweepMark); } //清扫 List <string> list = null; foreach (var item in abDict) { ABProxy abProxy = item.Value; if (abProxy.sweepMark != sweepMark) { if (list == null) { list = new List <string>(); } list.Add(item.Key); } } if (list != null) { for (int i = 0; i < list.Count; i++) { string abName = list[i]; ABProxy ab = abDict[abName]; ab.Dispose(); abDict.Remove(list[i]); } } }
void OnABLoaded(string abName, AssetBundle ab) { ABProxy abProxy = this.GetOrCreateABProxy(abName); abProxy.ab = ab; }
/// <summary> /// 加载一个AbProxy异步接口 /// </summary> /// <param name="abName"></param> /// <returns></returns> public WaitForABProxy LoadABProxySync(ABProxy abProxy) { return(new WaitForABProxy(this, abProxy)); }
public WaitForABProxy(ABMgr thiz, ABProxy abProxy) { //this.thiz = thiz; this.abProxy = abProxy; }