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