Exemplo n.º 1
0
        private IEnumerator CoLoadUI(UIInfo info, Action <UIBase> showEvent = null, params object[] userDatas)
        {
            LoadUIData data = PrePushToAllStack(info, userDatas);
            //先从对象池里面加载物体,没有找到对应的物体就加载一个,加载出来要放进对象池中保存起来
            GameObject obj = PoolManager.instance.GetObject <GameObject>(info.loadPath, info.loadPath.GetAssetName(), AssetType.Prefab);

            if (obj == null)
            {
                //动态加载
                var handle = Addressables.InstantiateAsync(info.loadPath);
                yield return(handle);

                if (handle.Result != null)
                {
                    obj = handle.Result;
                    //加载完了放入对象池
                    PoolManager.instance.AddItemToPool(info.loadPath, info.loadPath.GetAssetName(), obj, AssetType.Prefab, true);
                }
            }
            data.isLoading = false;

            if (obj != null)
            {
                obj.transform.SetParent(m_root);
                UIBase ui = obj.GetOrAddComponent <UIBase>();
                if (!ui.IsInit)
                {
                    ui.InitUI(info);
                }
                ui.CloseSelfEvent += OnClickCloseEvent;
                data.uiBase        = ui;
                PushUIDataToAllStack(data);
                PushUIToSelfStack(data);
                if (data.info.maskType != UIMaskType.None)
                {
                    ManagerMask();
                }

                IEnumerator iterator = ui.ShowUI(info.userDatas);
                info.iterator = iterator;
                yield return(iterator);

                showEvent?.TryInvoke(ui);

                LoadUIComplete(data);

                IEnumerator iterator2 = ui.LoadCompleteUI(info.userDatas);
                info.iterator = iterator2;
                yield return(iterator2);

                info.iterator = null;
            }
            else
            {
                Debug.LogError("Load " + data.info.loadPath + " fail!!! ");
            }
        }
Exemplo n.º 2
0
 private void InitUIBase(UIBase ui)
 {
     ui.InitUI();
     if (ui.uiType != UIType.None)
     {
         m_listMgr[ui.uiType].AddUI(ui);
     }
     ui.closeSelfAction += CloseCurUI;
 }