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!!! "); } }
private void InitUIBase(UIBase ui) { ui.InitUI(); if (ui.uiType != UIType.None) { m_listMgr[ui.uiType].AddUI(ui); } ui.closeSelfAction += CloseCurUI; }