From 6107b41770f4edf35cc60fb85b53e94ad1e9c7f5 Mon Sep 17 00:00:00 2001 From: ALEXTANG <574809918@qq.com> Date: Tue, 19 Dec 2023 18:24:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=8A=A8=E6=80=81=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0/=E5=BC=82=E6=AD=A5=E6=B7=BB=E5=8A=A0ui=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E7=9A=84=E8=84=8F=E6=95=B0=E6=8D=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正动态添加/异步添加ui组件的脏数据问题 --- .../Assets/TEngine/Runtime/Modules/UIModule/UIBase.cs | 10 +++++++++- .../TEngine/Runtime/Modules/UIModule/UIWidget.cs | 8 ++++++++ .../TEngine/Runtime/Modules/UIModule/UIWindow.cs | 5 +++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/UnityProject/Assets/TEngine/Runtime/Modules/UIModule/UIBase.cs b/UnityProject/Assets/TEngine/Runtime/Modules/UIModule/UIBase.cs index bad0f557..b8612b1f 100644 --- a/UnityProject/Assets/TEngine/Runtime/Modules/UIModule/UIBase.cs +++ b/UnityProject/Assets/TEngine/Runtime/Modules/UIModule/UIBase.cs @@ -175,7 +175,15 @@ namespace TEngine protected virtual void OnSetVisible(bool visible) { } - + + internal void SetUpdateDirty() + { + m_updateListValid = false; + if (Parent != null) + { + Parent.SetUpdateDirty(); + } + } #region FindChildComponent diff --git a/UnityProject/Assets/TEngine/Runtime/Modules/UIModule/UIWidget.cs b/UnityProject/Assets/TEngine/Runtime/Modules/UIModule/UIWidget.cs index bc11d5a3..4957e338 100644 --- a/UnityProject/Assets/TEngine/Runtime/Modules/UIModule/UIWidget.cs +++ b/UnityProject/Assets/TEngine/Runtime/Modules/UIModule/UIWidget.cs @@ -102,6 +102,11 @@ namespace TEngine for (int i = 0; i < listChild.Count; i++) { var uiWidget = listChild[i]; + + if (uiWidget == null) + { + continue; + } TProfiler.BeginSample(uiWidget.name); var needValid = uiWidget.InternalUpdate(); @@ -208,6 +213,7 @@ namespace TEngine RestChildCanvas(parentUI); parent = parentUI; Parent.ListChild.Add(this); + Parent.SetUpdateDirty(); ScriptGenerator(); BindMemberProperty(); RegisterEvent(); @@ -279,6 +285,8 @@ namespace TEngine /// internal void OnDestroyWidget() { + Parent?.SetUpdateDirty(); + RemoveAllUIEvent(); foreach (var uiChild in ListChild) diff --git a/UnityProject/Assets/TEngine/Runtime/Modules/UIModule/UIWindow.cs b/UnityProject/Assets/TEngine/Runtime/Modules/UIModule/UIWindow.cs index df9f7f3b..bd8fc15e 100644 --- a/UnityProject/Assets/TEngine/Runtime/Modules/UIModule/UIWindow.cs +++ b/UnityProject/Assets/TEngine/Runtime/Modules/UIModule/UIWindow.cs @@ -318,6 +318,11 @@ namespace TEngine { var uiWidget = listChild[i]; + if (uiWidget == null) + { + continue; + } + TProfiler.BeginSample(uiWidget.name); var needValid = uiWidget.InternalUpdate(); TProfiler.EndSample();