Esempio n. 1
0
 /// <summary>
 /// 回收块
 /// </summary>
 private void Recycle(UIStackChunk stackChunk)
 {
     stackChunk.UIBasePlane.OnClear();
     if (stackChunk.ConfigChunk.UICacheType == CacheType.Cache)
     {
         _pool.Release(stackChunk.UIBasePlane.gameObject);
     }
     else
     {
         GameObject.Destroy(stackChunk.UIBasePlane);
         if (stackChunk.ConfigChunk.UIResType == ResType.AssetBundleLoad)
         {
             AssetBundleMgr.instance.UnloadAssetBundle(stackChunk.UIPath);
         }
     }
     stackChunk.UIBasePlane = null;
     GC.Collect(0);
 }
Esempio n. 2
0
        /// <summary>
        /// 打开ui
        /// </summary>
        public void OpenUI(string ui, UIConfigChunk chunk, params object[] args)
        {
            if (chunk.UIResType == ResType.ResourceLoad && chunk.UICacheType == CacheType.Cache)
            {
                TimeLogger.LogError("ui conflict restype and cache type:" + ui);
                return;
            }
            if (_stack.Count != 0)
            {
                var peek = _stack.Peek();
                if (peek.UIPath == ui)
                {
                    return;
                }
                if (peek.ConfigChunk.UIWinType == WindowType.PopUp)
                {
                    _stack.Pop();
                    Recycle(peek);
                }
                else if (peek.ConfigChunk.UIWinType == WindowType.FullScreen)
                {
                    if (peek.ConfigChunk.UIOpenType == OpenType.Back)
                    {
                        Recycle(peek);
                    }
                }
            }
            UIStackChunk cacheStackChunk = null;

            foreach (var stackChunk in _stack)
            {
                if (stackChunk.UIPath == ui && null != stackChunk.UIBasePlane)
                {
                    cacheStackChunk = stackChunk;
                    break;
                }
            }
            BasePlane bp = null;

            if (null == cacheStackChunk)
            {
                GameObject bpGo;
                if (chunk.UIResType == ResType.ResourceLoad)
                {
                    var res = Resources.Load <GameObject>(ui);
                    bpGo = GameObject.Instantiate(res);
                }
                else
                {
                    if (chunk.UICacheType == CacheType.Cache)
                    {
                        bpGo = _pool.Get(ui, chunk);
                    }
                    else
                    {
                        bpGo = AssetBundleMgr.instance.GetAssetBundle(ui).LoadAsset <GameObject>(Path.GetFileNameWithoutExtension(ui));
                    }
                }
                bpGo.transform.parent = Origin;

                bp = bpGo.GetComponent <BasePlane>();

                var rt = bp.GetComponent <RectTransform>();
                rt.offsetMax  = Vector2.zero;
                rt.offsetMin  = Vector2.zero;
                rt.localScale = Vector3.one;

                bp.UIPath = ui;
                bp.OnOpen(args);
            }
            else
            {
                bp = cacheStackChunk.UIBasePlane;
                cacheStackChunk.UIBasePlane = null;
            }
            var uiStackChunk = new UIStackChunk(ui, bp, chunk, args);

            _stack.Push(uiStackChunk);
        }