Exemplo n.º 1
0
 public void AddDependABProxy(ABProxy abProxy)
 {
     if (abSet == null)
     {
         abSet = new HashSet <ABProxy>();
     }
     abSet.Add(abProxy);
 }
Exemplo n.º 2
0
        /// <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);
            }
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
        /// <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;
        }
Exemplo n.º 7
0
        /// <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;
        }
Exemplo n.º 8
0
        /// <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;
        }
Exemplo n.º 9
0
        /// <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;
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        /// <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]);
                }
            }
        }
Exemplo n.º 12
0
        void OnABLoaded(string abName, AssetBundle ab)
        {
            ABProxy abProxy = this.GetOrCreateABProxy(abName);

            abProxy.ab = ab;
        }
Exemplo n.º 13
0
 /// <summary>
 /// 加载一个AbProxy异步接口
 /// </summary>
 /// <param name="abName"></param>
 /// <returns></returns>
 public WaitForABProxy LoadABProxySync(ABProxy abProxy)
 {
     return(new WaitForABProxy(this, abProxy));
 }
Exemplo n.º 14
0
 public WaitForABProxy(ABMgr thiz, ABProxy abProxy)
 {
     //this.thiz = thiz;
     this.abProxy = abProxy;
 }