private void LoadUIFormSuccessCallback(string uiFormAssetName, object uiFormAsset, float duration, object userData) { OpenUIFormInfo openUIFormInfo = (OpenUIFormInfo)userData; if (openUIFormInfo == null) { Debug.LogError("打开界面的信息为空"); return; } m_UIFormsBeingLoaded.Remove(openUIFormInfo.SerialId); m_UIFormAssetNamesBeingLoaded.Remove(uiFormAssetName); if (m_UIFormsToReleaseOnLoad.Contains(openUIFormInfo.SerialId)) { Debug.LogError(string.Format("需要释放的界面:{0} 加载成功", openUIFormInfo.SerialId.ToString())); m_UIFormsToReleaseOnLoad.Remove(openUIFormInfo.SerialId); m_UIFormHelper.ReleaseUIForm(uiFormAsset, null); return; } //实例化界面,并将界面实例对象放入对象池 UIFormInstanceObject uiFormInstanceObject = new UIFormInstanceObject(uiFormAssetName, uiFormAsset, m_UIFormHelper.InstantiateUIForm(uiFormAsset), m_UIFormHelper); m_InstancePool.Register(uiFormInstanceObject, true); //打开界面 OpenUIForm(openUIFormInfo.SerialId, uiFormAssetName, openUIFormInfo.UIGroup, uiFormInstanceObject.Target, openUIFormInfo.PauseCoveredUIForm, true, duration, openUIFormInfo.UserData); }
/// <summary> /// 打开界面 /// </summary> /// <param name="uiFormAssetName">界面资源名称</param> /// <param name="uiGroupName">界面组名称</param> /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面</param> /// <param name="userData">用户自定义数据</param> /// <returns>界面的序列编号</returns> public int OpenUIForm(string uiFormAssetName, string uiGroupName, bool pauseCoveredUIForm = false, object userData = null) { if (m_ResourceManager == null) { Debug.LogError("打开界面时资源管理器为空"); return(-1); } if (m_UIFormHelper == null) { Debug.LogError("打开界面时界面辅助器为空"); return(-1); } if (string.IsNullOrEmpty(uiFormAssetName)) { Debug.LogError("要打开的界面的资源名称为空"); return(-1); } if (string.IsNullOrEmpty(uiGroupName)) { Debug.LogError("要打开的界面的界面组名称为空"); return(-1); } //界面组检查 UIGroup uiGroup = GetUIGroup(uiGroupName); if (uiGroup == null) { Debug.LogError(string.Format("要打开的界面的界面组:{0} 不存在", uiGroupName)); } //尝试从对象池获取界面实例 int serialId = m_Serial++; UIFormInstanceObject uiFormInstanceObject = m_InstancePool.Spawn(uiFormAssetName); if (uiFormInstanceObject == null) { //没获取到就加载该界面 m_UIFormsBeingLoaded.Add(serialId); m_UIFormAssetNamesBeingLoaded.Add(uiFormAssetName); m_ResourceManager.LoadAsset(uiFormAssetName, m_LoadAssetCallbacks, new OpenUIFormInfo(serialId, uiGroup, pauseCoveredUIForm, userData)); } else { OpenUIForm(serialId, uiFormAssetName, uiGroup, uiFormInstanceObject.Target, pauseCoveredUIForm, false, 0f, userData); } return(serialId); }