From 1ab047b5fdd933c38ba0519ec2e83a44512ea8d7 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 26 三月 2026 17:46:11 +0800
Subject: [PATCH] webgl代码合并 1

---
 Main/Manager/UIManager.cs |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 57 insertions(+), 2 deletions(-)

diff --git a/Main/Manager/UIManager.cs b/Main/Manager/UIManager.cs
index 35baaf0..94da3ac 100644
--- a/Main/Manager/UIManager.cs
+++ b/Main/Manager/UIManager.cs
@@ -5,6 +5,7 @@
 using System.Linq;
 using DG.Tweening;
 using Cysharp.Threading.Tasks;
+using UnityEngine.EventSystems;
 
 /// <summary>
 /// UI绠$悊鍣� - 璐熻矗绠$悊鎵�鏈塙I鐣岄潰鐨勬樉绀恒�侀殣钘忓拰灞傜骇
@@ -105,8 +106,10 @@
                 Debug.LogError("鏃犳硶鎵惧埌UI鏍硅妭鐐�");
                 return;
             }
-            GameObject.DontDestroyOnLoad(root);
         }
+
+        // 鏃犺鏄粠鍦烘櫙鎵惧埌杩樻槸鏂板疄渚嬪寲鐨勶紝閮界‘淇濊法鍦烘櫙涓嶈閿�姣�
+        GameObject.DontDestroyOnLoad(root);
 
         uiRoot = root.transform;
         uiRoot.position = Vector3.zero;
@@ -123,6 +126,8 @@
         layerTransformCache.Add(UILayer.Mid, midTrans);
         layerTransformCache.Add(UILayer.System, systemTrans);
         layerTransformCache.Add(UILayer.Loading, loadingTrans);
+
+        LogUIRootEventSystemState("InitUIRoot");
     }
     
     public Transform GetUIRoot()
@@ -632,8 +637,10 @@
                 Debug.LogError("鏃犳硶鍔犺浇UI鏍硅妭鐐�");
                 return;
             }
-            GameObject.DontDestroyOnLoad(root);
         }
+
+        // 鏃犺鏄粠鍦烘櫙鎵惧埌杩樻槸鏂板疄渚嬪寲鐨勶紝閮界‘淇濊法鍦烘櫙涓嶈閿�姣�
+        GameObject.DontDestroyOnLoad(root);
     }
 
     /// <summary>
@@ -806,6 +813,48 @@
         }
     }
 
+    public void DumpUIDiagnostics(string context)
+    {
+        var eventSystem = EventSystem.current;
+        Debug.Log($"[UIManager][Diag] {context} EventSystem={(eventSystem != null ? eventSystem.name : "<null>")} selected={(eventSystem != null && eventSystem.currentSelectedGameObject != null ? eventSystem.currentSelectedGameObject.name : "<null>")} loadingIndicatorActive={(_loadingIndicatorGO != null && _loadingIndicatorGO.activeSelf)} loadingRefCount={_loadingRefCount} uiStackCount={uiStack.Count}");
+        LogUIRootEventSystemState(context);
+
+        var uiArray = new UIBase[uiStack.Count];
+        uiStack.CopyTo(uiArray, 0);
+        foreach (var ui in uiArray)
+        {
+            if (ui == null)
+            {
+                continue;
+            }
+
+            var uiCanvas = ui.GetComponent<Canvas>();
+            var uiCanvasGroup = ui.GetComponent<CanvasGroup>();
+            Debug.Log($"[UIManager][Diag] {context} ui={ui.GetType().Name} active={ui.gameObject.activeInHierarchy} layer={ui.uiLayer} sortingOrder={(uiCanvas != null ? uiCanvas.sortingOrder : -1)} siblingIndex={ui.transform.GetSiblingIndex()} canvasGroup.blocksRaycasts={(uiCanvasGroup != null ? uiCanvasGroup.blocksRaycasts : false)} canvasGroup.interactable={(uiCanvasGroup != null ? uiCanvasGroup.interactable : false)}");
+        }
+    }
+
+    private void LogUIRootEventSystemState(string context)
+    {
+        if (uiRoot == null)
+        {
+            Debug.Log($"[UIManager][Diag] {context} uiRoot=<null>");
+            return;
+        }
+
+        var eventSystemTransform = uiRoot.Find("EventSystem");
+        if (eventSystemTransform == null)
+        {
+            Debug.Log($"[UIManager][Diag] {context} uiRoot.EventSystem child=<null>");
+            return;
+        }
+
+        var eventSystemComponent = eventSystemTransform.GetComponent<EventSystem>();
+        var standaloneInputModule = eventSystemTransform.GetComponent<StandaloneInputModule>();
+        var baseInputModule = eventSystemTransform.GetComponent<BaseInputModule>();
+        Debug.Log($"[UIManager][Diag] {context} uiRoot.EventSystem childExists=true activeSelf={eventSystemTransform.gameObject.activeSelf} activeInHierarchy={eventSystemTransform.gameObject.activeInHierarchy} eventSystemComponent={(eventSystemComponent != null)} standaloneInputModule={(standaloneInputModule != null)} baseInputModuleType={(baseInputModule != null ? baseInputModule.GetType().Name : "<null>")} currentMatchesChild={(EventSystem.current == eventSystemComponent)}");
+    }
+
     private void EnsureLoadingIndicator()
     {
         if (_loadingIndicatorGO != null) return;
@@ -865,6 +914,10 @@
         // 閬嶅巻UI鏍堬紝璁剧疆鎺掑簭椤哄簭
         UIBase[] uiArray = new UIBase[uiStack.Count];
         uiStack.CopyTo(uiArray, 0);
+
+        // WebGL/IL2CPP 涓嬭 Destroy 鐨勫璞¤闂换浣曞睘鎬ч兘浼� NullReferenceException锛�
+        // 蹇呴』鍦ㄤ娇鐢ㄥ墠杩囨护鎺夛紙Unity 浼� null锛欳# 寮曠敤闈� null 浣� == null 涓� true锛�
+        uiArray = System.Array.FindAll(uiArray, ui => ui != null);
         
         // 鍏堟寜鐓ILayer杩涜鎺掑簭锛岀劧鍚庡啀鎸夌収鏍堥『搴忔帓搴�
         Dictionary<UIBase, int> uiOrderDict = new Dictionary<UIBase, int>();
@@ -875,6 +928,7 @@
 
         Array.Sort(uiArray, (a, b) =>
         {
+            if (a == null || b == null) return 0;
             int layerCompare = a.uiLayer.CompareTo(b.uiLayer);
             if (layerCompare != 0)
                 return layerCompare;
@@ -885,6 +939,7 @@
         // 閬嶅巻鎺掑簭鍚庣殑UI鏁扮粍锛岃缃帓搴忛『搴�
         foreach (var ui in uiArray)
         {
+            if (ui == null) continue;
             // 鑾峰彇鍩虹鎺掑簭椤哄簭
             int baseSortingOrder = GetBaseSortingOrderForLayer(ui.uiLayer);
             // 璁$畻褰撳墠UI鐨勬帓搴忛『搴�

--
Gitblit v1.8.0