/// <summary> /// 打开UI,完成后执行回调 /// </summary> /// <param name="uiName">UI名字</param> /// <param name="callback">回调</param> /// <param name="args">传递到0nStart的参数</param> public void OpenWithCallback(string uiName, Action <UI> callback, params object[] args) { UIData uiData = FindUIData(uiName); if (uiData == null) { Debug.LogError($"OpenWithCallbackAsync {uiName}未注册"); return; } IUIContainer uiContainer = null; if (showDic.TryGetValue(uiData.UIType, out uiContainer)) { uiContainer?.Open(uiName, callback, args); } }
/// <summary> /// 打开UI /// </summary> /// <param name="uiName">UI名字</param> /// <param name="args">传递到0nStart的参数</param> public void Open(string uiName, params object[] args) { UIData uiData = FindUIData(uiName); if (uiData == null) { Debug.LogError($"{uiName}未注册"); return; } IUIContainer uiContainer = null; if (showDic.TryGetValue(uiData.UIType, out uiContainer)) { uiContainer?.Open(uiName, null, args); } }
/// <summary> /// 尝试加载LoadWithParent=true的子UI /// </summary> /// <returns></returns> public async Task TryLoadChildUI(string uiName) { UIData parentUIData = null; if (uiRegisterDic.TryGetValue(uiName, out parentUIData)) { if (parentUIData.HasChildUI) { foreach (var kv in parentUIData.ChildDic) { if (kv.Value.LoadWithParent)// && kv.Value.UIResType != UIResType.SetGameObject { await LoadChildUI(kv.Key); } } } } }
/// <summary> /// 加载UI /// </summary> /// <param name="uiName">ui名字</param> /// <returns></returns> private Task LoadUI(string uiName) { UIContext tempUIContext = FindUIContext(uiName); if (tempUIContext != null) { //加载完成 return(tempUIContext.TCS.Task); } else { //从池中找 if (poolDic.TryGetValue(uiName, out tempUIContext)) { poolDic.Remove(uiName); uiList.Add(tempUIContext); return(tempUIContext.TCS.Task); } //加载新UI UIData uiData = null; uiRegisterDic.TryGetValue(uiName, out uiData); //是否子UI if (uiData == null) { uiChildRegisterDic.TryGetValue(uiName, out uiData); } if (uiData != null) { tempUIContext = new UIContext(); tempUIContext.UIData = uiData; tempUIContext.TCS = new TaskCompletionSource <bool>(); uiList.Add(tempUIContext); if (tempUIContext.UIData.UIResType != UIResType.SetGameObject) { Main.Instance.StartCoroutine(LoadAsset(GetAssetUrl(uiName), go => { if (tempUIContext.UIData.IsChildUI) { GameUI parentUI = FindUI(tempUIContext.UIData.ParentUIName) as GameUI; if (parentUI != null) { tempUIContext.UI = new ChildUI(tempUIContext.UIData.UIName, parentUI); } } else { tempUIContext.UI = new GameUI(); } tempUIContext.UI.SetContext(go, tempUIContext); if (tempUIContext.TCS != null) { tempUIContext.TCS.SetResult(true); } })); } else { //处理SetGameObject的子UI GameUI parentUI = FindUI(tempUIContext.UIData.ParentUIName) as GameUI; if (parentUI != null) { if (tempUIContext.UIData.IsChildUI) { tempUIContext.UI = new ChildUI(tempUIContext.UIData.UIName, parentUI); if (parentUI != null) { GameObject childGameObject = parentUI.ChildParentNode.FindGameObject(tempUIContext.UIData.UIName); if (childGameObject == null) { Debug.LogErrorFormat("父UI:{0}不存在子UI节点:{1}", tempUIContext.UIData.ParentUIName, tempUIContext.UIData.UIName); } else { tempUIContext.UI.SetContext(childGameObject, tempUIContext); tempUIContext.TCS.SetResult(true); } } } } } return(tempUIContext.TCS.Task); } Debug.LogError($"{uiName}:不存在"); return(null); } }