From dd5cfa3ab3e46c627efea95a4875d478bdfac527 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 06 六月 2025 11:40:06 +0800
Subject: [PATCH] 18 子 2D卡牌客户端搭建 / 2D卡牌客户端搭建 修复scaleinout无效的问题 登录流程优化 closedUIDict没被清空的问题

---
 Main/System/UIBase/UIBase.cs                                                          |   63 ++++++++++-----------
 Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs        |    2 
 Main/Manager/StageManager.cs                                                          |    4 +
 Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0403_tagPlayerLoginLoadOK.cs |    2 
 Main/Manager/UIManager.cs                                                             |   51 +++++++++++-----
 Main/ResModule/ResManager.cs                                                          |    5 +
 6 files changed, 73 insertions(+), 54 deletions(-)

diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
index 63f1d0a..b425993 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
@@ -57,6 +57,8 @@
 
 
         MainRedDot.Instance.Register();
+        StageManager.Instance.ToGameScene();
+        
         //SettingMgr.Instance.SetIsRecordData(PlayerDatas.Instance.baseData.PlayerID.ToString());
 
     }
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0403_tagPlayerLoginLoadOK.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0403_tagPlayerLoginLoadOK.cs
index 52ba9c9..aad146a 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0403_tagPlayerLoginLoadOK.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0403_tagPlayerLoginLoadOK.cs
@@ -30,8 +30,6 @@
         {
             //鏈嶅姟绔瘡娆″垏鍦烘櫙閮戒細閫氱煡杩欎釜灏佸寘, 澧炲姞棣栨鍦板浘鐧诲綍鎴愬姛浜嬩欢(濡傛灉鏈嶅姟绔瓨鍦ㄥ鍦烘櫙鍒囨崲鐨勬儏鍐�)
             playerLoginOkEvent?.Invoke();
-            StageManager.Instance.ToGameScene();
-            Main.OnEnterGameScene();
         }
         finishedLogin = true;
         //if (mapInitOkEvent != null)
diff --git a/Main/Manager/StageManager.cs b/Main/Manager/StageManager.cs
index c1890ff..fa82c63 100644
--- a/Main/Manager/StageManager.cs
+++ b/Main/Manager/StageManager.cs
@@ -77,11 +77,13 @@
 
         AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("Game");
 
-        await OnLoading(asyncOperation, GetManagerRequestDataProgress);
+        await OnLoading(asyncOperation, () => (DTC0403_tagPlayerLoginLoadOK.finishedLogin ? .5f : 0f) + GetManagerRequestDataProgress() * .5f);
 
         //  鍔犺浇鍒濆鍖栨暟鎹畬鎴�
         currentStage = StageName.Game;
 
+        Main.OnEnterGameScene();
+
         AfterLoadingGameScene?.Invoke();
 
         UIManager.Instance.OpenWindow<MainWin>();
diff --git a/Main/Manager/UIManager.cs b/Main/Manager/UIManager.cs
index bf666e6..0a81944 100644
--- a/Main/Manager/UIManager.cs
+++ b/Main/Manager/UIManager.cs
@@ -25,9 +25,9 @@
     private Transform staticTrans;
     private Transform bottomTrans;
     private Transform midTrans;
-    private Transform topTrans;
     private Transform systemTrans;
-    
+    private Transform loadingTrans;
+
     // UI瀛楀吀锛屽瓨鍌ㄦ墍鏈夊凡鍔犺浇鐨刄I锛岄敭涓篣I鍚嶇О锛屽�间负UI瀹炰緥
     private Dictionary<string, List<UIBase>> uiDict = new Dictionary<string, List<UIBase>>();
     
@@ -112,15 +112,15 @@
         staticTrans = uiRoot.Find("Static");
         bottomTrans = uiRoot.Find("Bottom");
         midTrans = uiRoot.Find("Middle");
-        topTrans = uiRoot.Find("Top");
+        loadingTrans = uiRoot.Find("Loading");
         systemTrans = uiRoot.Find("System");
 
         layerTransformCache.Clear();
         layerTransformCache.Add(UILayer.Static, staticTrans);
         layerTransformCache.Add(UILayer.Bottom, bottomTrans);
         layerTransformCache.Add(UILayer.Mid, midTrans);
-        layerTransformCache.Add(UILayer.Top, topTrans);
         layerTransformCache.Add(UILayer.System, systemTrans);
+        layerTransformCache.Add(UILayer.Loading, loadingTrans);
     }
     
     #endregion
@@ -142,16 +142,16 @@
                 result = BASE_SORTING_ORDER;
                 break;
             case UILayer.Bottom:
-                result = BASE_SORTING_ORDER * 10;
-                break;
-            case UILayer.Mid:
                 result = BASE_SORTING_ORDER * 100;
                 break;
-            case UILayer.Top:
+            case UILayer.Mid:
                 result = BASE_SORTING_ORDER * 1000;
                 break;
             case UILayer.System:
                 result = BASE_SORTING_ORDER * 10000;
+                break;
+            case UILayer.Loading:
+                result = BASE_SORTING_ORDER * 100000;
                 break;
             default:
                 result = BASE_SORTING_ORDER * 10;
@@ -183,11 +183,11 @@
             case UILayer.Mid:
                 result = midTrans;
                 break;
-            case UILayer.Top:
-                result = topTrans;
-                break;
             case UILayer.System:
                 result = systemTrans;
+                break;
+            case UILayer.Loading:
+                result = loadingTrans;
                 break;
             default:
                 result = bottomTrans;
@@ -585,8 +585,14 @@
 
         UIBase returnValue = null;
 
-        if (closedUIDict.TryGetValue(uiName, out List<UIBase> closedUIList) && closedUIList.Count > 0)
+        Debug.Log("OpenWindow " + uiName);
+
+        List<UIBase> closedUIList = new List<UIBase>();
+
+        if (closedUIDict.TryGetValue(uiName, out closedUIList) && closedUIList.Count > 0)
         {
+            Debug.Log("OpenWindow getFromClosedDict " + uiName);
+
             returnValue = closedUIList[0] as UIBase;
             closedUIList.RemoveAt(0);
             
@@ -597,6 +603,7 @@
         }
         else
         {
+            Debug.Log("OpenWindow getNewLoad " + uiName);
             returnValue = LoadUIResource(uiName);
             if (returnValue == null)
             {
@@ -721,7 +728,9 @@
         
         // 鑾峰彇UI绫诲瀷鍚嶇О
         string uiName = ui.uiName;
-        
+
+        Debug.Log("CloseWindow " + uiName + " destroy : " + destroy.ToString());
+
         // 鏀堕泦鎵�鏈夊瓙UI
         List<UIBase> childrenUI = new List<UIBase>();
         if (ui.supportParentChildRelation)
@@ -792,8 +801,10 @@
             }
             closedUIDict[uiName].Add(ui);
             
-            // 闅愯棌UI
-            ui.gameObject.SetActive(false);
+            Debug.Log("CloseWindow " + uiName + " destroy : " + destroy.ToString() + " push to closedUIDict");
+
+            // 闅愯棌UI (浜ょ粰handle close鍐呴儴鑷繁鍘诲仛)
+            // ui.gameObject.SetActive(false);
         }
         
         // 鏇存柊UI鎺掑簭椤哄簭
@@ -834,7 +845,7 @@
         for (int i = 0; i < allUI.Count; i++)
         {
             UIBase uiBase = allUI[i];
-            if (!uiBase.isMainUI && uiBase.uiLayer != UILayer.System)
+            if (!uiBase.isMainUI && uiBase.uiLayer < UILayer.System)
             {
                 CloseWindow(uiBase);
             }
@@ -857,6 +868,14 @@
             CloseWindow(ui, true);
         }
         
+        foreach (var uiList in closedUIDict.Values)
+        {
+            foreach (var ui in uiList)
+            {
+                GameObject.Destroy(ui.gameObject);
+            }
+        }
+
         // 娓呯┖UI瀛楀吀鍜屾爤
         uiDict.Clear();
         uiStack.Clear();
diff --git a/Main/ResModule/ResManager.cs b/Main/ResModule/ResManager.cs
index 47653d7..4c5ce0b 100644
--- a/Main/ResModule/ResManager.cs
+++ b/Main/ResModule/ResManager.cs
@@ -1,4 +1,4 @@
-using UnityEngine;
+锘縰sing UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 using Cysharp.Threading.Tasks;
@@ -142,10 +142,11 @@
         T asset = null;
 
         var path = ($"Assets/ResourcesOut/{directory}/{name}" + GetExtension(typeof(T))).Replace("//", "/").Trim().Replace("\\", "/");
-        path = System.Text.RegularExpressions.Regex.Replace(path, @"[\p{C}]", "");
         if (AssetSource.uiFromEditor)
         {
 #if UNITY_EDITOR
+            //  TODO YYL 杩樻槸瑕佹壘鍒板瓧绗︿覆闂
+            path = System.Text.RegularExpressions.Regex.Replace(path, @"[\p{C}]", "");
             asset = UnityEditor.AssetDatabase.LoadAssetAtPath<T>(path);
 #endif
         }
diff --git a/Main/System/UIBase/UIBase.cs b/Main/System/UIBase/UIBase.cs
index 79135b2..1566a7e 100644
--- a/Main/System/UIBase/UIBase.cs
+++ b/Main/System/UIBase/UIBase.cs
@@ -8,11 +8,12 @@
 
 public enum UILayer
 {
-    Static, // 闈欐�乁I 閫傚悎鍋� 甯搁┗鐢ㄧ殑濡� 涓荤晫闈�
-    Bottom, // 鏈�搴曞眰 閫傚悎鍋� 涓荤晫闈笂闈㈢殑 涓�绾х獥鍙� 涓�绾х晫闈�
-    Mid,    // 閫傚悎鍋� 浜岀骇绐楀彛 浜岀骇鐣岄潰
-    Top,    // 閫傚悎鍋氭彁绀哄脊绐�
-    System  // 缃戠粶寮圭獥/鍏朵粬閲嶈寮圭獥/绯荤粺鍏憡
+    Static, // 闈欐�乁I 閫傚悎鍋� 鎴樻枟 涓荤晫闈�
+    Bottom, // 涓荤晫闈�
+    Mid,    // 鍔熻兘绐楀彛
+    System,  // 缃戠粶寮圭獥/鍏朵粬閲嶈寮圭獥
+    Loading,    // 鍔犺浇鐣岄潰
+
 }
 
 public enum UIAnimationType
@@ -46,7 +47,7 @@
     // 鍔ㄧ敾鐩稿叧
     [SerializeField] public UIAnimationType openAnimationType = UIAnimationType.ScaleInOut;
     [SerializeField] public UIAnimationType closeAnimationType = UIAnimationType.None;
-    [SerializeField][HideInInspector] public float animationDuration = 0.3f;
+    [SerializeField]/*[HideInInspector]*/ public float animeDuration = 0.2f;
     [SerializeField][HideInInspector] public Ease animationEase = Ease.OutQuad; // 纭繚浣跨敤 DG.Tweening.Ease
 
     // 杩愯鏃剁姸鎬�
@@ -82,6 +83,8 @@
     protected Vector3 originalScale;
     protected Vector3 originalPosition;
     protected Sequence currentAnimation;
+
+    private CanvasScaler canvasScaler;
 
     #endregion
 
@@ -180,6 +183,8 @@
         {
             gameObject.AddComponent<UnityEngine.UI.GraphicRaycaster>();
         }
+
+        canvasScaler = GetComponent<CanvasScaler>();
 
         // 鑾峰彇RectTransform缁勪欢
         rectTransform = GetComponent<RectTransform>();
@@ -500,11 +505,7 @@
             case UIAnimationType.ScaleInOut:
                 if (rectTransform != null)
                 {
-                    rectTransform.localScale = Vector3.zero;
-                }
-                if (canvasGroup != null)
-                {
-                    canvasGroup.alpha = 0f;
+                    canvasScaler.scaleFactor = 0.3f;
                     canvasGroup.interactable = false;
                     canvasGroup.blocksRaycasts = false;
                 }
@@ -582,18 +583,14 @@
                 case UIAnimationType.FadeInOut:
                     if (canvasGroup != null)
                     {
-                        currentAnimation.Append(canvasGroup.DOFade(1f, animationDuration).SetEase(animationEase));
+                        currentAnimation.Append(canvasGroup.DOFade(1f, animeDuration).SetEase(animationEase));
                     }
                     break;
 
                 case UIAnimationType.ScaleInOut:
                     if (rectTransform != null)
                     {
-                        currentAnimation.Append(rectTransform.DOScale(originalScale, animationDuration).SetEase(animationEase));
-                    }
-                    if (canvasGroup != null)
-                    {
-                        currentAnimation.Join(canvasGroup.DOFade(1f, animationDuration).SetEase(animationEase));
+                        currentAnimation.Append(DOVirtual.Float(0.3f, originalScale.x, animeDuration, (value) => {canvasScaler.scaleFactor = value;}).SetEase(animationEase));
                     }
                     break;
 
@@ -603,11 +600,11 @@
                 case UIAnimationType.SlideFromRight:
                     if (rectTransform != null)
                     {
-                        currentAnimation.Append(rectTransform.DOAnchorPos(originalPosition, animationDuration).SetEase(animationEase));
+                        currentAnimation.Append(rectTransform.DOAnchorPos(originalPosition, animeDuration).SetEase(animationEase));
                     }
                     if (canvasGroup != null)
                     {
-                        currentAnimation.Join(canvasGroup.DOFade(1f, animationDuration).SetEase(animationEase));
+                        currentAnimation.Join(canvasGroup.DOFade(1f, animeDuration).SetEase(animationEase));
                     }
                     break;
             }
@@ -624,6 +621,8 @@
                     canvasGroup.blocksRaycasts = true;
                 }
             });
+
+            currentAnimation.Play();
         }
         catch (System.Exception e)
         {
@@ -662,18 +661,14 @@
                 case UIAnimationType.FadeInOut:
                     if (canvasGroup != null)
                     {
-                        currentAnimation.Append(canvasGroup.DOFade(0f, animationDuration).SetEase(animationEase));
+                        currentAnimation.Append(canvasGroup.DOFade(0f, animeDuration).SetEase(animationEase));
                     }
                     break;
 
                 case UIAnimationType.ScaleInOut:
                     if (rectTransform != null)
                     {
-                        currentAnimation.Append(rectTransform.DOScale(Vector3.zero, animationDuration).SetEase(animationEase));
-                    }
-                    if (canvasGroup != null)
-                    {
-                        currentAnimation.Join(canvasGroup.DOFade(0f, animationDuration).SetEase(animationEase));
+                        currentAnimation.Append(DOVirtual.Float(originalScale.x, 0.3f, animeDuration, (value) => {canvasScaler.scaleFactor = value;}).SetEase(animationEase));
                     }
                     break;
 
@@ -682,11 +677,11 @@
                     {
                         Vector2 endPos = originalPosition;
                         endPos.y = Screen.height;
-                        currentAnimation.Append(rectTransform.DOAnchorPos(endPos, animationDuration).SetEase(animationEase));
+                        currentAnimation.Append(rectTransform.DOAnchorPos(endPos, animeDuration).SetEase(animationEase));
                     }
                     if (canvasGroup != null)
                     {
-                        currentAnimation.Join(canvasGroup.DOFade(0f, animationDuration).SetEase(animationEase));
+                        currentAnimation.Join(canvasGroup.DOFade(0f, animeDuration).SetEase(animationEase));
                     }
                     break;
 
@@ -695,11 +690,11 @@
                     {
                         Vector2 endPos = originalPosition;
                         endPos.y = -Screen.height;
-                        currentAnimation.Append(rectTransform.DOAnchorPos(endPos, animationDuration).SetEase(animationEase));
+                        currentAnimation.Append(rectTransform.DOAnchorPos(endPos, animeDuration).SetEase(animationEase));
                     }
                     if (canvasGroup != null)
                     {
-                        currentAnimation.Join(canvasGroup.DOFade(0f, animationDuration).SetEase(animationEase));
+                        currentAnimation.Join(canvasGroup.DOFade(0f, animeDuration).SetEase(animationEase));
                     }
                     break;
 
@@ -708,11 +703,11 @@
                     {
                         Vector2 endPos = originalPosition;
                         endPos.x = -Screen.width;
-                        currentAnimation.Append(rectTransform.DOAnchorPos(endPos, animationDuration).SetEase(animationEase));
+                        currentAnimation.Append(rectTransform.DOAnchorPos(endPos, animeDuration).SetEase(animationEase));
                     }
                     if (canvasGroup != null)
                     {
-                        currentAnimation.Join(canvasGroup.DOFade(0f, animationDuration).SetEase(animationEase));
+                        currentAnimation.Join(canvasGroup.DOFade(0f, animeDuration).SetEase(animationEase));
                     }
                     break;
 
@@ -721,11 +716,11 @@
                     {
                         Vector2 endPos = originalPosition;
                         endPos.x = Screen.width;
-                        currentAnimation.Append(rectTransform.DOAnchorPos(endPos, animationDuration).SetEase(animationEase));
+                        currentAnimation.Append(rectTransform.DOAnchorPos(endPos, animeDuration).SetEase(animationEase));
                     }
                     if (canvasGroup != null)
                     {
-                        currentAnimation.Join(canvasGroup.DOFade(0f, animationDuration).SetEase(animationEase));
+                        currentAnimation.Join(canvasGroup.DOFade(0f, animeDuration).SetEase(animationEase));
                     }
                     break;
             }
@@ -741,6 +736,8 @@
                     CompleteClose();
                 }
             });
+
+            currentAnimation.Play();
         }
         catch (System.Exception e)
         {

--
Gitblit v1.8.0