/// <summary>/// 创建页面实例/// </summary> private static void CreateUIPageInstance(string pageName, string pagePath, Transform parent, Action <GameObject> afterInitialedInstanceAction, LoadAssetChannelUsage loadAssetChannel) { GameObject go = ResourcesManagerUtility.InstantiateAssetSync(pagePath, parent, false, loadAssetChannel); if (go != null) { go.name = pageName; } afterInitialedInstanceAction?.Invoke(go); }
//创建或者获取 public static T GetOrCreateWidgetInstance <T>(string pageName, string pagePath, UIBasePage parentPage, Transform parentTrans, LoadAssetChannelUsage loadAssetChannel = LoadAssetChannelUsage.Default) where T : UIBaseWidget, new() { T widget = GetWidgetInstanceOfTargetParent <T>(pageName, parentPage); if (widget != null) { return(widget); } return(CreateWidgetInstance <T>(pageName, pagePath, parentPage, parentTrans, loadAssetChannel)); }
private static Dictionary <string, UIBaseChangePage> s_AllAliveUIChangePages = new Dictionary <string, UIBaseChangePage>(); //记录所有现在还在内存中的页面 /// <summary>/// 切换到 另一个界面/// </summary> public static T OpenChangePage <T>(string pageName, string pagePath, LoadAssetChannelUsage loadAssetChannel = LoadAssetChannelUsage.Default) where T : UIBaseChangePage, new() { if (string.IsNullOrEmpty(pageName) || string.IsNullOrEmpty(pageName)) { Debug.LogError("OpenChangePage Fail,Parameter is null"); return(null); } if (CurUIBaseChangePage != null && (pageName == CurUIBaseChangePage.PageName)) { Debug.LogError("页面无法切换到自身 " + pageName); return(CurUIBaseChangePage as T); } //自己切换到自己 T targetPage = TryGetUIChangePageFromCache(pageName) as T; //首先检测缓存中的数据 //创建界面 if (targetPage == null || targetPage.IsPrefabInstanceEnable == false) { CreateUIPageInstance(pageName, pagePath, mUIChangePage, (goInstance) => { if (goInstance != null) { if (targetPage == null) { targetPage = new T(); } else { targetPage.ResetPageForReConnectInstance(); } targetPage.UIChangePageInitialed(pageName, pagePath, UIPageTypeEnum.ChangePage, goInstance); TryCacheUIChangePage(targetPage); targetPage.InstantiatePage(); //初始化 #if UNITY_EDITOR //var debugShowScript = goInstance.GetAddComponentEx<Debug_ShowUIPageInfor>(); //debugShowScript.Initialed(targetPage); #endif } }, loadAssetChannel); } if (targetPage == null || targetPage.IsPrefabInstanceEnable == false) { Debug.LogError($"创建页面 pageName={pageName} pagePath={pagePath} "); return(null); } string previousPageName = CurUIBaseChangePage != null ? CurUIBaseChangePage.PageName : string.Empty; if (CurUIBaseChangePage != null) { CurUIBaseChangePage.HidePage(false); RecordChangePage(CurUIBaseChangePage.PageName); } CurUIBaseChangePage = targetPage; targetPage.ShowPage(); EventManager.TriggerMessage((int)UIEventUsage.NotifyChangePage, previousPageName, CurUIBaseChangePage.PageName); return(targetPage); }
/// <summary>/// 不会检测是否有缓存 每次都是重新创建 不受UIPageManager 管理生命周期,只受到父级页面管理/// </summary> public static T CreateWidgetInstance <T>(string pageName, string pagePath, UIBasePage parentPage, Transform parentTrans, LoadAssetChannelUsage loadAssetChannel = LoadAssetChannelUsage.Default) where T : UIBaseWidget, new() { if (string.IsNullOrEmpty(pageName) || string.IsNullOrEmpty(pageName)) { Debug.LogError("CreateWidgetPage Fail,Parameter is null"); return(null); } T targetWidget = null; CreateUIPageInstance(pageName, pagePath, parentTrans, (gameObjectReference) => { if (gameObjectReference != null) { targetWidget = new T(); targetWidget.UIPageInitialed(pageName, UIPageTypeEnum.Widget, parentPage, gameObjectReference); targetWidget.InstantiatePage(); //初始化 #if UNITY_EDITOR //var debugShowScript = gameObjectReference.GetAddComponentEx<Debug_ShowUIPageInfor>(); //debugShowScript.Initialed(targetWidget); #endif } }, loadAssetChannel); targetWidget?.ShowPage(); return(targetWidget); }
/// <summary>/// /// 打开弹窗 isCreateInstanceIfIsShowing 标示已经有一个同名的弹窗存在并且现实中是否需要创建一个新的实例 默认不需要 /// /// </summary> public static T ShowPopWindow <T>(string pageName, string pagePath, bool isBelongCurPage, bool isCreateInstanceIfIsShowing = false, LoadAssetChannelUsage loadAssetChannel = LoadAssetChannelUsage.Default) where T : UIBasePopWindow, new() { if (string.IsNullOrEmpty(pageName) || string.IsNullOrEmpty(pageName)) { Debug.LogError("ShowPopWindow Fail,Parameter is null"); return(null); } T targetPage = TryGetUIPopWindowFromCache(pageName, isCreateInstanceIfIsShowing ? -1 : 0) as T; //获取隐藏的弹窗 如果没有则创建 if (targetPage != null) { targetPage.ChangeBelongChangePage(isBelongCurPage ? CurUIBaseChangePage : null); targetPage.ShowPage(); return(targetPage); } //取出打开的界面 CreateUIPageInstance(pageName, pagePath, mUIPopWindow, (gameObjectReference) => { if (gameObjectReference != null) { targetPage = new T(); targetPage.UIPageInitialed(pageName, targetPage.mUIPageTypeEnum, isBelongCurPage ? CurUIBaseChangePage : null, gameObjectReference); TryCacheUIPopWindow(targetPage); targetPage.InstantiatePage(); //初始化 targetPage.ShowPage(); EventManager.TriggerMessage((int)UIEventUsage.NotifyShowPopWindow, targetPage.PageName); //显示弹窗 #if UNITY_EDITOR //var debugShowScript = gameObjectReference.GetAddComponentEx<Debug_ShowUIPageInfor>(); //debugShowScript.Initialed(targetPage); #endif } }, loadAssetChannel); return(targetPage); }