角色详情界面 修复进入快速退出时的错误显示

main
Yuntao Hu 2024-08-15 14:56:28 +08:00
parent 5d77d30735
commit 5591c75d4d
5 changed files with 67 additions and 21 deletions

View File

@ -373,15 +373,15 @@ public partial class UIManager : Singlenton<UIManager>, IInitable, IUpdatable
return window;
}
//展示全部已加载的NormalUI
public void OpenLoadedNormalUI(string uiName)
public void OpenLoadedNormalUI(string uiName, object data = null)
{
WindowInfo wInfo;
wInfo = _windowsInfo[uiName];
if (mMemoryWindows.ContainsKey(uiName))
if (mMemoryWindows.ContainsKey(uiName))
{
mMemoryWindows[uiName].CreateWindow(null, wInfo.NotSetMainCamera);
mMemoryWindows[uiName].CreateWindow(data, wInfo.NotSetMainCamera);
}
}

View File

@ -118,11 +118,25 @@ public class UI_CultivateController : UIWindow
}
public enum UILeftCharanterUIType
{
/// <summary>
/// 角色基础属性
/// </summary>
EbaseAttri,
/// <summary>
/// 角色详细属性
/// </summary>
EDetailInfo,
}
public override async void PreLoad(object data = null)
{
base.PreLoad(data);
#region 子UI预加载
proAndInfoWindow = await UIManager.Instance.LoadWindow(UINameConst.UI_Cultivate_ProAndInfo) as UI_Cultivate_ProAndInfoController;
detailWindow = await UIManager.Instance.LoadWindow(UINameConst.UI_Cultivate_Detail) as UI_Cultivate_DetailController;
#endregion
}
public override void OnInit()
{
@ -297,7 +311,7 @@ public class UI_CultivateController : UIWindow
Image_RankLevelObj.SetActive(false);
UI_Cultivate_ActSkObj.SetActive(false);
FindObj("Image_BG/Image_NameInfo").SetActive(false);
await UniTask.Delay(1000);
await WaitTimeForFx();
//StartCoroutine(_coroutine);
@ -305,8 +319,7 @@ public class UI_CultivateController : UIWindow
private async UniTask WaitTimeForFx()
{
await UniTask.Delay(1000);
if (!gameObject)
if (!IsShow())
{
return;
}
@ -333,10 +346,15 @@ public class UI_CultivateController : UIWindow
Button_Look.gameObject.SetActive(true);
Button_ChangeSuit.gameObject.SetActive(true);
while (animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1f)
while (animator != null && animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1f)
{
await UniTask.Yield();
}
if (animator == null)
{
DebugUtil.LogWarning("animator is null! 可能是由于动画未完成提前关闭了界面导致");
return;
}
EventManager.Instance.Send(EventManager.EventName.UIOpenAndAnim, WindowName);
}
@ -371,10 +389,8 @@ public class UI_CultivateController : UIWindow
//{
// return fingerUpPosition.x - fingerDownPosition.x > 50f; // 调整阈值以适应您的需求
//}
private async void OnButton_BackClick()
private void OnButton_BackClick()
{
CloseCurOpenChildUI();
//UIManager.Instance.CloseWindow(UINameConst.UI_Cultivate);
CloseWindow();
// UIWindow uIWindow= UIManager.Instance.PopWindow();
@ -385,9 +401,14 @@ public class UI_CultivateController : UIWindow
{
UIManager.Instance.CloseAllNormalExcept(UINameConst.UI_MainPanel);
}
void CloseCurOpenChildUI()
/// <summary>
/// 关闭预加载的子UI
/// </summary>
void ClosePreloadChildUI()
{
CloseLeftCurChildUI();
//CloseLeftCurChildUI();
UIManager.Instance.CloseWindow(UINameConst.UI_Cultivate_ProAndInfo);
UIManager.Instance.CloseWindow(UINameConst.UI_Cultivate_Detail);
}
private void RegisterEvent()
{
@ -510,7 +531,11 @@ public class UI_CultivateController : UIWindow
public override void OnRelease()
{
base.OnRelease();
#region 释放预加载
ClosePreloadChildUI();
#endregion
UnRegisterEvent();
}
@ -1081,15 +1106,18 @@ public class UI_CultivateController : UIWindow
}
async void OpenLeftChildUI(UILeftCharanterUIType uIChracterType)
void OpenLeftChildUI(UILeftCharanterUIType uIChracterType)//async
{
switch (uIChracterType)
{
case UILeftCharanterUIType.EbaseAttri:
proAndInfoWindow = await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_Cultivate_ProAndInfo, mCurCharaData) as UI_Cultivate_ProAndInfoController;
UIManager.Instance.OpenLoadedNormalUI(UINameConst.UI_Cultivate_ProAndInfo, mCurCharaData);
//proAndInfoWindow = await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_Cultivate_ProAndInfo, mCurCharaData) as UI_Cultivate_ProAndInfoController;
break;
case UILeftCharanterUIType.EDetailInfo:
detailWindow = await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_Cultivate_Detail, mCurCharaData) as UI_Cultivate_DetailController;
UIManager.Instance.OpenLoadedNormalUI(UINameConst.UI_Cultivate_Detail, mCurCharaData);
//
//detailWindow = await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_Cultivate_Detail, mCurCharaData) as UI_Cultivate_DetailController;
break;
default:
@ -1104,10 +1132,12 @@ public class UI_CultivateController : UIWindow
switch (mCurLeftUICharacterType)
{
case UILeftCharanterUIType.EbaseAttri:
UIManager.Instance.CloseWindow(UINameConst.UI_Cultivate_ProAndInfo);
proAndInfoWindow.Hide();
//UIManager.Instance.CloseWindow(UINameConst.UI_Cultivate_ProAndInfo);
break;
case UILeftCharanterUIType.EDetailInfo:
UIManager.Instance.CloseWindow(UINameConst.UI_Cultivate_Detail);
detailWindow.Hide();
//UIManager.Instance.CloseWindow(UINameConst.UI_Cultivate_Detail);
break;

View File

@ -167,6 +167,14 @@ public class UI_Cultivate_DetailController : UIWindow
RefreshInfos();
}
/// <summary>
/// 隐藏Window
/// </summary>
public void Hide()
{
UIManager.Instance.Hide(WindowName);
}
private void UnRegisterEvent()
{
EventManager.Instance.Unregister(EventManager.EventName.EN_CharacterLevelUp, (Action<UpgradeType>)OnCharacterLevelup);

View File

@ -238,6 +238,14 @@ public class UI_Cultivate_ProAndInfoController : UIWindow
EventManager.Instance.Send(EventManager.EventName.EN_ShowAllCharacterFavorableUI);
}
/// <summary>
/// 隐藏Window
/// </summary>
public void Hide()
{
UIManager.Instance.Hide(WindowName);
}
//invoke when open window

View File

@ -418,7 +418,7 @@ public class UI_StartGameInterfaceController : UIWindow
#else
//使用账号登录界面
curShownWindow = debugLoginWindow;
if (Debug.isDebugBuild)
if (Debug.isDebugBuild)//测试环境
{
if (loginSaveData.LoginByPhone)
{
@ -428,7 +428,7 @@ public class UI_StartGameInterfaceController : UIWindow
{
SetLoginType(LoginType.Account);
}
if (loginSaveData.LoginByAccount && loginSaveData.rememberPassword && LoginController.Instance.AutoLogin)
if (loginSaveData.LoginByAccount && loginSaveData.rememberPassword && LoginController.Instance.AutoLogin)//保存有数据且为初次登录时尝试自动登录
{
DebugUtil.Log("已有账号密码,自动登录");
LoginAction();