From 39001a600fcae2bcf27c225df8752d75fb92fef4 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 31 十月 2025 11:18:26 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts

---
 Main/System/UIBase/UIBase.cs |  436 +++++++++++++++++++++++++++---------------------------
 1 files changed, 219 insertions(+), 217 deletions(-)

diff --git a/Main/System/UIBase/UIBase.cs b/Main/System/UIBase/UIBase.cs
index 35878f9..0f76fe6 100644
--- a/Main/System/UIBase/UIBase.cs
+++ b/Main/System/UIBase/UIBase.cs
@@ -9,9 +9,9 @@
 public enum UILayer
 {
     Static, // 闈欐�乁I 閫傚悎鍋� 鎴樻枟 涓荤晫闈�
-    Bottom, // 涓荤晫闈�
-    Mid,    // 鍔熻兘绐楀彛
-    System,  // 缃戠粶寮圭獥/鍏朵粬閲嶈寮圭獥
+    Bottom, // 閮ㄥ垎鐣岄潰鐗规畩澶勭悊灞傜骇鐢�
+    Mid,    // 澶ч儴鍒嗗姛鑳界獥鍙i兘鏀捐繖灞傦紝渚夸簬璺宠浆涓婁笅灞傜鐞嗭紙涓�涓晫闈㈠彲浠ュ悓鏃跺瓨鍦ㄥ涓級
+    System,  // 缃戠粶寮圭獥锛屼俊鎭彁绀虹瓑锛屽叾浠栭噸瑕佸脊绐�
     Loading,    // 鍔犺浇鐣岄潰
 
 }
@@ -25,7 +25,7 @@
     SlideFromBottom, // 浠庡簳閮ㄦ粦鍏�
     SlideFromLeft, // 浠庡乏渚ф粦鍏�
     SlideFromRight, // 浠庡彸渚ф粦鍏�
-    ScaleOverInOut,// 缂╂斁锛堣秴杩囷級涔嬪悗鍐嶈繑鍥�
+    ScaleOverInOut,// 缂╂斁鏍规嵁鏇茬嚎
 
 }
 
@@ -39,17 +39,22 @@
     // UI鍩烘湰灞炴��
     [SerializeField] public UILayer uiLayer = UILayer.Mid;
     [SerializeField][HideInInspector] public string uiName;
-    [SerializeField] public bool isMainUI = false;
-    [SerializeField] public bool supportParentChildRelation = true; // 鏂板锛氭槸鍚︽敮鎸佺埗瀛愬叧绯�
+    [SerializeField] public bool isMainUI = false;   //鍚屾椂鍕鹃�塻upportParentChildRelation 浼氬綋浣滄柊鐨勭埗鑺傜偣锛屼絾涓嶄綔涓哄瓙鑺傜偣
+
+    // 鏄惁鏀寔鐖跺瓙鍏崇郴锛屽嵆UI鎷ユ湁鐨勪笂涓嬬骇閾惧紡鍏崇郴
+    // 鎷ユ湁鐖跺瓙鍏崇郴 鍦ㄥ叧闂埗鐣岄潰鐨勬椂鍊� 瀛愮晫闈細杩炲悓涓�璧峰叧闂� 瀛愮晫闈㈡墦寮�鏃�
+    // 鍦ㄩ潪鐗瑰畾鎯呭喌涓� 閮借鎷ユ湁鐖跺瓙鍏崇郴 锛堜竴鑸潵璇村姛鑳介兘瑕佹湁鐖跺瓙鍏崇郴 渚嬪鐨勬槸渚嬪绯荤粺寮圭獥 
+    // 闄勫姞璇存槑锛氬姛鑳藉熀鏈仛鍦∕iddle灞�
+    [SerializeField] public bool supportParentChildRelation = true; 
 
     // 鎸佷箙鍖栫浉鍏�
     [SerializeField] public bool isPersistent = false;
     [SerializeField][HideInInspector] public int maxIdleRounds = 20;
 
+
     // 鍔ㄧ敾鐩稿叧
     [SerializeField] public UIAnimationType openAnimationType = UIAnimationType.None;
     [SerializeField] public UIAnimationType closeAnimationType = UIAnimationType.None;
-    [SerializeField] protected RectTransform _rectTransform; //鐣岄潰榛樿娣诲姞鏍硅妭鐐圭敤浜庤〃鐜扮晫闈㈠紑鍚叧闂姩鐢�
     
     [SerializeField]/*[HideInInspector]*/ public float animeDuration = 0.2f;
     [SerializeField]public TweenCurve scaleOverInOutCurve;
@@ -59,20 +64,25 @@
     [HideInInspector] public int lastUsedRound = 0;
     [HideInInspector] public UIBase parentUI;
 
-    [HideInInspector] public GameObject rootNode; // 鏍硅妭鐐�
-
     // 瀛怳I绠$悊
     [HideInInspector] public List<UIBase> childrenUI = new List<UIBase>();
 
+    [Header("鎵�鏈塙I鎺掔増搴旇鍦ㄦ鑺傜偣鍐呭眰")]
+    [SerializeField] protected RectTransform _rectTransform; //鐣岄潰榛樿娣诲姞鏍硅妭鐐圭敤浜庤〃鐜扮晫闈㈠紑鍚叧闂姩鐢伙紝鎴栬�呰缃�傞厤鐢�
+
+    //閬僵缁勪欢鍦ㄧ晫闈㈠紑鍙戜腑鐢熸垚锛岄伄缃╁紑鍏冲拰鐐瑰嚮绌虹櫧涓哄叾涓殑缁勪欢鐗规��
     //  鎵撳紑閬僵
+    [Header("閬僵(閫忔槑)寮�鍏�")]
     [SerializeField] public bool openMask = false;
 
-    //  鐐瑰嚮绌虹櫧鍖哄煙鍏抽棴鐣岄潰
+    //  榛樿鐐瑰嚮绌虹櫧鍖哄煙鍏抽棴鐣岄潰
+    [Header("鐐瑰嚮绌虹櫧鍏抽棴")]
     [SerializeField] public bool clickEmptySpaceClose = false;
 
-    private GameObject screenMask = null;
+    public GameObject screenMask = null;
 
     private Button btnClickEmptyClose;
+    public Action btnClickEmptyCloseEvent = null;   //鎻愪緵鐐瑰嚮绌虹櫧鍖哄煙鍏抽棴鐣岄潰鐨勫洖璋�
 
     //  璺烵neLevelWin鑱斿姩 瀹為檯涓婃槸闇�瑕佺户鎵胯嚜OneLevelWin鎵嶈兘鐢熸晥鐨勫�� 浣跨敤闇�瑕佹敞鎰�
     int m_FunctionOrder = 0;
@@ -95,34 +105,54 @@
     protected Vector3 originalPosition;
     protected Sequence currentAnimation;
 
-    private CanvasScaler canvasScaler;
+    public CanvasScaler canvasScaler
+    {
+        get;
+        private set;
+    }
 
+    public const int SafeHeightUp = 50;
+    public const int SafeHeightDown = 30;
     #endregion
 
     #region Unity鐢熷懡鍛ㄦ湡
 
     protected virtual void Awake()
     {
-        //  闃叉鏈変汉涓嶅啓base.InitComponent寮曞彂閿欒 鎵�浠ユ媶鍒�
-        InitComponentInternal();
-        // 鍦ˋwake涓繘琛屽熀鏈垵濮嬪寲
-        InitComponent();
+        try
+        {
+            InitComponentInternal();
+        }
+        catch (Exception e)
+        {
+            Debug.LogError($"{uiName}鐣岄潰鐨処nitComponentInternal鎶ラ敊: {e.StackTrace}");
+        }
+
+        try
+        {
+            InitComponent();
+        }
+        catch (Exception e)
+        {
+            Debug.LogError($"{uiName}鐣岄潰鐨処nitComponent鎶ラ敊: {e.StackTrace}");
+        }
 
         // 淇濆瓨鍘熷鍊肩敤浜庡姩鐢�
         if (_rectTransform != null)
         {
+            if (Screen.height / Screen.width > 1.8)//瀹藉睆闇�瑕侀�傞厤
+            {
+                //涓婁笅鍚勯棿闅擲afeWidth
+                _rectTransform.offsetMax = new Vector2(0, -SafeHeightUp);  //涓�
+                _rectTransform.offsetMin = new Vector2(0, SafeHeightDown);   //涓�
+            }
             originalPosition = _rectTransform.anchoredPosition;
         }
 
-        ApplySettings();
-
-        if (openMask)
-        {
-            screenMask = GameObject.Instantiate(Resources.Load<GameObject>("Prefabs/ScreenMask"), transform);
-            screenMask.transform.localScale = Vector3.one;
-            screenMask.transform.localPosition = Vector3.zero;
+        if (screenMask != null)
             screenMask.transform.SetAsFirstSibling();
-        }
+        InitClickEmptySpaceBtn();
+
     }
 
     protected virtual void Start()
@@ -130,20 +160,38 @@
         // 瀛愮被鍙互閲嶅啓姝ゆ柟娉曡繘琛岄澶栧垵濮嬪寲
     }
 
-    protected async UniTask ApplySettings()
+    protected async UniTask ApplyClickEmptySpaceClose()
     {
         if (clickEmptySpaceClose)
         {
-            //寤惰繜鍒涘缓浼氬鑷村眰绾у湪ScreenMask涔嬩笂
-            GameObject goBtnESC = GameObject.Instantiate(Resources.Load<GameObject>("Prefabs/ClickEmptyCloseMask"), transform);
-            btnClickEmptyClose = goBtnESC.GetComponent<Button>();
-            btnClickEmptyClose.AddListener(CloseWindow);
-            btnClickEmptyClose.transform.SetAsFirstSibling();
-            await UniTask.DelayFrame(5);
-
-            btnClickEmptyClose = goBtnESC.GetComponent<Button>();
-            btnClickEmptyClose.AddListener(CloseWindow);
+            //寤惰繜x甯у悗鍙偣鍑�,闃叉鐐瑰嚮杩囧揩绔嬪嵆鍏抽棴浜�
+            await UniTask.Delay(200);
+            btnClickEmptyClose.enabled = true;
         }
+    }
+
+    private void InitClickEmptySpaceBtn()
+    {
+        if (!clickEmptySpaceClose)
+        {
+            return;
+        }
+
+        btnClickEmptyClose = screenMask.GetComponent<Button>();
+
+        btnClickEmptyClose.AddListener(() =>
+        {
+            if (btnClickEmptyCloseEvent != null)
+            {
+                btnClickEmptyCloseEvent();
+            }
+            else
+            {
+                CloseWindow();
+            }
+        });
+
+        btnClickEmptyClose.enabled = false;
     }
 
 
@@ -178,8 +226,10 @@
 
         // 璁剧疆Canvas灞炴��
         canvas.overrideSorting = true;
-
         canvas.worldCamera = CameraManager.uiCamera;
+        canvas.pixelPerfect = false;
+
+        canvas.sortingLayerID = SortingLayer.NameToID("UI"); // 纭繚浣跨敤姝g‘鐨勬帓搴忓眰
 
         // 鑾峰彇鎴栨坊鍔燙anvasGroup缁勪欢
         canvasGroup = GetComponent<CanvasGroup>();
@@ -195,6 +245,9 @@
         }
 
         canvasScaler = GetComponent<CanvasScaler>();
+        canvasScaler.referenceResolution = Constants.DESIGN_RESOLUTION;
+        canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
+        canvasScaler.matchWidthOrHeight = 0;
     }
 
     // 鑾峰彇蹇呰鐨勭粍浠�
@@ -225,22 +278,61 @@
     // 鎵撳紑UI
     public void HandleOpen()
     {
-        OnPreOpen();
-        // 濡傛灉姝e湪鎾斁鍔ㄧ敾锛屽厛鍋滄
+        if (_rectTransform == null)
+        {
+            Debug.LogError($"鐣岄潰: {uiName} 闇�瑕佽缃牴鑺傜偣_rectTransform ");
+            return;
+        }
+
+        if ((clickEmptySpaceClose || openMask) && screenMask == null)
+        {
+            Debug.LogError($"鐣岄潰: {uiName} 缂哄皯閬僵 ");
+            return;
+        }
+
+        try
+        {
+            OnPreOpen();
+        }
+        catch (Exception e)
+        {
+            Debug.LogError($"{uiName}鐣岄潰鐨凮nPreOpen鎶ラ敊: {e.StackTrace}");
+        }
+
         StopCurrentAnimation();
 
-        // 閲嶇疆鍏抽棴鏍囪
         isClosing = false;
-        
         gameObject.SetActive(true);
         isActive = true;
 
-        // 鏍规嵁鍔ㄧ敾绫诲瀷鎾斁鎵撳紑鍔ㄧ敾
         PlayOpenAnimation();
 
-        OnOpen();
+        // // 濡傛灉鍚庣画闇�瑕佺粺涓�澶勭悊鍒樻捣鎴栬�呭皬娓告垙鐨勭晫闈㈤�傞厤闂
+        // _rectTransform.offsetMin = new Vector2(0, 10);  //涓嬫柟
+        // _rectTransform.offsetMax = new Vector2(0, -50); //涓婃柟
 
-        ExecuteNextFrame(NextFrameAfterOpen);
+        try
+        {
+            OnOpen();
+        }
+        catch (Exception e)
+        {
+            Debug.LogError($"{uiName}鐣岄潰鐨凮nOpen鎶ラ敊: {e.StackTrace}");
+        }
+
+        ApplyClickEmptySpaceClose();
+
+        ExecuteNextFrame(() =>
+        {
+            try
+            {
+                NextFrameAfterOpen();
+            }
+            catch (Exception e)
+            {
+                Debug.LogError($"{uiName}鐣岄潰鐨凬extFrameAfterOpen鎶ラ敊: {e.StackTrace}");
+            }
+        });
     }
 
     protected virtual void NextFrameAfterOpen()
@@ -253,32 +345,50 @@
     {
         // 濡傛灉宸茬粡鍦ㄥ叧闂繃绋嬩腑锛岀洿鎺ヨ繑鍥�
         if (isClosing) return;
-        
-        OnPreClose();
-        
-        // 濡傛灉姝e湪鎾斁鍔ㄧ敾锛屽厛鍋滄
+
+        if (clickEmptySpaceClose)
+            btnClickEmptyClose.enabled = false;
+
+        try
+        {
+            OnPreClose();
+        }
+        catch (Exception e)
+        {
+            Debug.LogError($"{uiName}鐣岄潰鐨凮nPreClose鎶ラ敊: {e.StackTrace}");
+        }
+
         StopCurrentAnimation();
 
-        // 璁剧疆鍏抽棴鏍囪
         isClosing = true;
         isActive = false;
-        
-        // 绂佺敤浜や簰浣嗕繚鎸佸彲瑙�
+
         if (canvasGroup != null)
         {
             canvasGroup.blocksRaycasts = false;
         }
 
-        // 鏍规嵁鍔ㄧ敾绫诲瀷鎾斁鍏抽棴鍔ㄧ敾
         PlayCloseAnimation();
 
-        // 璋冪敤鍏抽棴鍥炶皟
-        OnClose();
-        
-        // 濡傛灉娌℃湁鍏抽棴鍔ㄧ敾锛岀洿鎺ョ鐢ㄦ父鎴忓璞�
+        try
+        {
+            OnClose();
+        }
+        catch (Exception e)
+        {
+            Debug.LogError($"{uiName}鐣岄潰鐨凮nClose鎶ラ敊: {e.StackTrace}");
+        }
+
         if (closeAnimationType == UIAnimationType.None)
         {
-            CompleteClose();
+            try
+            {
+                CompleteClose();
+            }
+            catch (Exception e)
+            {
+                Debug.LogError($"{uiName}鐣岄潰鐨凜ompleteClose鎶ラ敊: {e.StackTrace}");
+            }
         }
         // 鍚﹀垯鍦ㄥ姩鐢诲畬鎴愬悗绂佺敤娓告垙瀵硅薄锛堝湪PlayCloseAnimation涓鐞嗭級
     }
@@ -293,6 +403,12 @@
     public virtual void CloseWindow()
     {
         UIManager.Instance.CloseWindow(this, false);
+    }
+
+    public async UniTask DelayCloseWindow(int delayTime = 30)
+    {
+        await UniTask.Delay(delayTime);
+        CloseWindow();
     }
 
     // 鍒锋柊UI
@@ -324,148 +440,27 @@
     /// <summary>
     /// 鎾斁UI鐗规晥
     /// </summary>
-    /// <param name="effectName">鐗规晥璧勬簮鍚嶇О</param>
+    /// <param name="id">鐗规晥璧勬簮鍚嶇О</param>
     /// <param name="parent">鐗规晥鐖惰妭鐐癸紝榛樿涓哄綋鍓峌I</param>
-    /// <param name="autoDestroy">鏄惁鑷姩閿�姣侊紝榛樿涓簍rue</param>
-    /// <param name="destroyDelay">鑷姩閿�姣佸欢杩熸椂闂达紝榛樿涓�5绉�</param>
     /// <returns>鐗规晥娓告垙瀵硅薄</returns>
-    public GameObject PlayUIEffect(int id, Transform parent = null, bool autoDestroy = true, float destroyDelay = 5f)
+    public UIEffectPlayer PlayUIEffect(int id, Transform parent = null)
     {
         // 浣跨敤榛樿鍊�
         if (parent == null) parent = transform;
-        
-        EffectConfig effectCfg = EffectConfig.Get(id);
 
-        if (null == effectCfg)
+        return UIEffectPlayer.CreateEffect(id, parent, false);
+    }
+
+    public int GetSortingOrder()
+    {
+        if (null != canvas)
         {
-            return null;
+            return canvas.sortingOrder;
         }
 
-        // 鍔犺浇鐗规晥璧勬簮
-        var effectPrefab = ResManager.Instance.LoadAsset<GameObject>("UIEffect/" + effectCfg.packageName, effectCfg.fxName);
-        if (effectPrefab == null)
-        {
-            Debug.LogError($"鍔犺浇UI鐗规晥澶辫触: {effectCfg.packageName}");
-            return null;
-        }
-        
-        // 瀹炰緥鍖栫壒鏁�
-        GameObject effectObj = Instantiate(effectPrefab, parent);
-        effectObj.name = $"Effect_{effectCfg.packageName}";
-        
-        // 娣诲姞鐗规晥绌块�忛樆鎸″櫒
-        EffectPenetrationBlocker blocker = effectObj.AddComponent<EffectPenetrationBlocker>();
-        blocker.parentCanvas = canvas;
-
-        //  寤惰繜涓�甯ф墠鐢熸晥
-        this.DelayFrame(blocker.UpdateSortingOrder);
-
-        // blocker.UpdateSortingOrder();
-        
-        // 鑷姩閿�姣�
-        if (autoDestroy)
-        {
-            Destroy(effectObj, destroyDelay);
-        }
-        
-        return effectObj;
+        return 0;
     }
     
-    /// <summary>
-    /// 鍦ㄤ袱涓猆I鍏冪礌涔嬮棿鎾斁鐗规晥锛堟寜鐓ortingOrder鐨勪腑闂村�硷級
-    /// </summary>
-    /// <param name="effectName">鐗规晥璧勬簮鍚嶇О</param>
-    /// <param name="frontElement">鍓嶆櫙UI鍏冪礌锛圛mage鎴朢awImage锛�</param>
-    /// <param name="backElement">鑳屾櫙UI鍏冪礌锛圛mage鎴朢awImage锛�</param>
-    /// <param name="autoDestroy">鏄惁鑷姩閿�姣侊紝榛樿涓簍rue</param>
-    /// <param name="destroyDelay">鑷姩閿�姣佸欢杩熸椂闂达紝榛樿涓�5绉�</param>
-    /// <returns>鐗规晥娓告垙瀵硅薄</returns>
-    public async UniTask<GameObject> PlayEffectBetweenUIElements(string effectName, Graphic frontElement, Graphic backElement, bool autoDestroy = true, float destroyDelay = 5f)
-    {
-        if (frontElement == null || backElement == null)
-        {
-            Debug.LogError("鍓嶆櫙鎴栬儗鏅疷I鍏冪礌涓虹┖");
-            return null;
-        }
-        
-        // 纭繚UI鍏冪礌鍦ㄥ綋鍓峌IBase鐨凜anvas涓�
-        if (frontElement.canvas != canvas || backElement.canvas != canvas)
-        {
-            Debug.LogError("UI鍏冪礌涓嶅湪褰撳墠UIBase鐨凜anvas涓�");
-            return null;
-        }
-        
-        // 鍔犺浇鐗规晥璧勬簮
-        GameObject effectPrefab = ResManager.Instance.LoadAsset<GameObject>("UIEffect", effectName);
-        if (effectPrefab == null)
-        {
-            Debug.LogError($"鍔犺浇UI鐗规晥澶辫触: {effectName}");
-            return null;
-        }
-        
-        // 鍒涘缓涓�涓柊鐨凣ameObject浣滀负鐗规晥瀹瑰櫒
-        GameObject container = new GameObject($"EffectContainer_{effectName}");
-        container.transform.SetParent(transform, false);
-        
-        // 璁剧疆瀹瑰櫒浣嶇疆
-        RectTransform containerRect = container.AddComponent<RectTransform>();
-        containerRect.anchorMin = new Vector2(0.5f, 0.5f);
-        containerRect.anchorMax = new Vector2(0.5f, 0.5f);
-        containerRect.pivot = new Vector2(0.5f, 0.5f);
-        containerRect.anchoredPosition = Vector2.zero;
-        containerRect.sizeDelta = new Vector2(100, 100); // 榛樿澶у皬锛屽彲浠ユ牴鎹渶瑕佽皟鏁�
-        
-        // 鑾峰彇鍓嶆櫙鍜岃儗鏅厓绱犵殑siblingIndex
-        int frontIndex = frontElement.transform.GetSiblingIndex();
-        int backIndex = backElement.transform.GetSiblingIndex();
-        
-        // 璁剧疆鐗规晥瀹瑰櫒鐨剆iblingIndex鍦ㄤ袱鑰呬箣闂�
-        if (frontIndex > backIndex)
-        {
-            // 鍓嶆櫙鍦ㄨ儗鏅箣鍚庯紝鐗规晥搴旇鍦ㄤ腑闂�
-            container.transform.SetSiblingIndex((frontIndex + backIndex) / 2 + 1);
-        }
-        else
-        {
-            // 鑳屾櫙鍦ㄥ墠鏅箣鍚庯紝鐗规晥搴旇鍦ㄤ腑闂�
-            container.transform.SetSiblingIndex((frontIndex + backIndex) / 2);
-        }
-        
-        // 瀹炰緥鍖栫壒鏁�
-        GameObject effectObj = Instantiate(effectPrefab, container.transform);
-        effectObj.name = $"Effect_{effectName}";
-        
-        // 娣诲姞鐗规晥绌块�忛樆鎸″櫒
-        EffectPenetrationBlocker blocker = effectObj.AddComponent<EffectPenetrationBlocker>();
-        
-        // 鐩存帴璁剧疆鐗规晥娓叉煋鍣ㄧ殑鎺掑簭椤哄簭
-        Renderer[] renderers = effectObj.GetComponentsInChildren<Renderer>(true);
-        foreach (Renderer renderer in renderers)
-        {
-            renderer.sortingOrder = canvas.sortingOrder;
-            renderer.sortingLayerName = canvas.sortingLayerName;
-        }
-        
-        // 璁剧疆绮掑瓙绯荤粺娓叉煋鍣ㄧ殑鎺掑簭椤哄簭
-        ParticleSystem[] particleSystems = effectObj.GetComponentsInChildren<ParticleSystem>(true);
-        foreach (ParticleSystem ps in particleSystems)
-        {
-            ParticleSystemRenderer psRenderer = ps.GetComponent<ParticleSystemRenderer>();
-            if (psRenderer != null)
-            {
-                psRenderer.sortingOrder = canvas.sortingOrder;
-                psRenderer.sortingLayerName = canvas.sortingLayerName;
-            }
-        }
-        
-        // 鑷姩閿�姣�
-        if (autoDestroy)
-        {
-            Destroy(container, destroyDelay);
-        }
-        
-        return effectObj;
-    }
     #endregion
 
     public bool raycastTarget
@@ -495,7 +490,8 @@
     // 鎾斁鎵撳紑鍔ㄧ敾
     protected virtual void PlayOpenAnimation()
     {
-
+        //绂佺敤浜や簰浼氬紩璧风偣閫忛棶棰�, 鍚庣画瑙e喅鍙互鑰冭檻EventSystem
+        canvasGroup.blocksRaycasts = true;
 
         if (openAnimationType == UIAnimationType.None)
         {
@@ -514,11 +510,11 @@
                 if (canvasGroup != null)
                 {
                     canvasGroup.alpha = 0f;
-                    canvasGroup.blocksRaycasts = false;
+                    // canvasGroup.blocksRaycasts = false;
                 }
-                if (canvasScaler != null)
+                if (_rectTransform != null)
                 {
-                    canvasScaler.scaleFactor = 1f;
+                    _rectTransform.localScale = Vector3.one;
                 }
                 break;
 
@@ -526,11 +522,11 @@
                 if (canvasGroup != null)
                 {
                     canvasGroup.alpha = 1f;
-                    canvasGroup.blocksRaycasts = false;
+                    // canvasGroup.blocksRaycasts = false;
                 }
-                if (canvasScaler != null)
+                if (_rectTransform != null)
                 {
-                    canvasScaler.scaleFactor = 0.3f;
+                    _rectTransform.localScale = Vector3.one * 0.3f;
                 }
                 break;
 
@@ -577,11 +573,12 @@
                 if (canvasGroup != null)
                 {
                     canvasGroup.alpha = 1f;
-                    canvasGroup.blocksRaycasts = false;
+                    // 绂佺敤浜や簰浼氬紩璧风偣閫忛棶棰�
+                    // canvasGroup.blocksRaycasts = false;
                 }
-                if (canvasScaler != null)
+                if (_rectTransform != null)
                 {
-                    canvasScaler.scaleFactor = 0.3f;
+                    _rectTransform.localScale = Vector3.one * 0.3f;
                 }
                 break;
         }
@@ -604,7 +601,7 @@
                 case UIAnimationType.ScaleInOut:
                     if (_rectTransform != null)
                     {
-                        currentAnimation.Append(DOVirtual.Float(0.3f, 1f, animeDuration, (value) => {canvasScaler.scaleFactor = value;}).SetEase(animationEase));
+                        currentAnimation.Append(DOVirtual.Float(0.3f, 1f, animeDuration, (value) => {_rectTransform.localScale = Vector3.one * value;}).SetEase(animationEase));
                     }
                     break;
 
@@ -620,19 +617,19 @@
                 case UIAnimationType.ScaleOverInOut:
                     if (_rectTransform != null)
                     {
-                        if (null == scaleOverInOutCurve)
-                        {
-                            currentAnimation.Append(DOVirtual.Float(0.3f, 1.2f, animeDuration, 
-                            (value) => {canvasScaler.scaleFactor = value;}).SetEase(animationEase));
-                        }
-                        else
-                        {
-                            currentAnimation.Append(DOVirtual.Float(0.3f, 1.2f, animeDuration, 
-                                (value) => {canvasScaler.scaleFactor = value;}).SetEase(scaleOverInOutCurve.curve));
-                        }
+                        float startScale = scaleOverInOutCurve.curve.Evaluate(0f);
+                        _rectTransform.localScale = Vector3.one * startScale;
+                        currentAnimation.Append(
+                            DOTween.To(
+                                () => _rectTransform.localScale.x,
+                                (value) => _rectTransform.localScale = Vector3.one * value,
+                                1f, 
+                                animeDuration
+                            )
+                            .SetEase(scaleOverInOutCurve.curve)
+                            .OnComplete(() => _rectTransform.localScale = Vector3.one) // 纭繚鏈�缁堝��1姝g‘
+                        );
                         
-
-                        // currentAnimation.Append(DOVirtual.Float(1.2f, 1f, 0.1f, (value) => {canvasScaler.scaleFactor = value;}).SetEase(scaleOverInOutCurve));
                     }
                     break;
             }
@@ -658,7 +655,7 @@
         }
         catch (System.Exception e)
         {
-            Debug.LogError($"鎾斁鎵撳紑鍔ㄧ敾鏃跺嚭閿�: {e.Message}");
+            Debug.LogError($"鎾斁鎵撳紑鍔ㄧ敾鏃跺嚭閿�: {e.StackTrace}");
 
             // 鍑洪敊鏃剁‘淇漊I鍙骞跺彲浜や簰
             if (canvasGroup != null)
@@ -682,9 +679,9 @@
             canvasGroup.alpha = 1f;
             canvasGroup.blocksRaycasts = true;
         }
-        if (canvasScaler != null)
+        if (_rectTransform != null)
         {
-            canvasScaler.scaleFactor = 1f;
+            _rectTransform.localScale = Vector3.one;
         }
 
         if (_rectTransform != null)
@@ -728,7 +725,7 @@
                 case UIAnimationType.ScaleOverInOut:
                     if (_rectTransform != null)
                     {
-                        currentAnimation.Append(DOVirtual.Float(1f, 0.3f, animeDuration, (value) => {canvasScaler.scaleFactor = value;}).SetEase(animationEase));
+                        currentAnimation.Append(DOVirtual.Float(1f, 0.3f, animeDuration, (value) => {_rectTransform.localScale = Vector3.one * value;}).SetEase(animationEase));
                     }
                     break;
 
@@ -773,11 +770,16 @@
             currentAnimation.OnComplete(() =>
             {
                 isAnimating = false;
-                
-                // 鍔ㄧ敾瀹屾垚鍚庯紝瀹屾垚鍏抽棴杩囩▼
                 if (isClosing)
                 {
-                    CompleteClose();
+                    try
+                    {
+                        CompleteClose();
+                    }
+                    catch (Exception e)
+                    {
+                        Debug.LogError($"{uiName}鐣岄潰鐨凜ompleteClose鎶ラ敊: {e.StackTrace}");
+                    }
                 }
             });
 
@@ -785,7 +787,7 @@
         }
         catch (System.Exception e)
         {
-            Debug.LogError($"鎾斁鍏抽棴鍔ㄧ敾鏃跺嚭閿�: {e.Message}");
+            Debug.LogError($"鎾斁鍏抽棴鍔ㄧ敾鏃跺嚭閿�: {e.StackTrace}");
             
             // 鍑洪敊鏃剁洿鎺ュ畬鎴愬叧闂�
             isAnimating = false;

--
Gitblit v1.8.0