From 174a8c6df2f9bf63c0ad2fa0ce3bad6bcbe0f634 Mon Sep 17 00:00:00 2001 From: ninemine <1371605831@qq.com> Date: Wed, 3 Dec 2025 16:58:56 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8DUpdatement=E4=B8=AD?= =?UTF-8?q?=E9=81=97=E6=BC=8F=E7=9A=84bug2.=E5=AF=B9=E7=94=9F=E6=88=90?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E4=BA=86=E4=B8=80=E5=AE=9A=E7=9A=84=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Framework/GameContent/GameController.cs | 12 ++++-- Assets/Scripts/Framework/RootObject.cs | 11 ++++- Assets/Scripts/Framework/ScriptableObject.cs | 43 +++++++++++-------- .../DefaultScriptableObjectInstantiate.cs | 1 + Assets/Scripts/Framework/Updatement.cs | 20 ++++----- 5 files changed, 56 insertions(+), 31 deletions(-) diff --git a/Assets/Scripts/Framework/GameContent/GameController.cs b/Assets/Scripts/Framework/GameContent/GameController.cs index 9019aa2..e6cdd1f 100644 --- a/Assets/Scripts/Framework/GameContent/GameController.cs +++ b/Assets/Scripts/Framework/GameContent/GameController.cs @@ -221,17 +221,23 @@ namespace Demo.Game rootGameObject.SetContent(nameof(IsAutoPlay), IsAutoPlay ? 1 : 0); rootGameObject.SetContent("SongLength", MainAudio.CurrentClip.length); yield return rootGameObject.ParseFromScriptFile2Expr(rootObject); - static void NDFS(ScriptableObject current) + int NDFSCount = 0; + IEnumerator NDFS(ScriptableObject current) { foreach (var child in current.Childs) { - NDFS(child); + ConventionUtility.StartCoroutine(NDFS(child)); + NDFSCount++; + if(NDFSCount % 100 == 0) + { + yield return null; + } } if (current.IsScriptApply == false) ConventionUtility.StartCoroutine(current.ApplyScript()); } //yield return - NDFS(rootGameObject); + ConventionUtility.StartCoroutine(NDFS(rootGameObject)); } } finally diff --git a/Assets/Scripts/Framework/RootObject.cs b/Assets/Scripts/Framework/RootObject.cs index e519877..cc6a326 100644 --- a/Assets/Scripts/Framework/RootObject.cs +++ b/Assets/Scripts/Framework/RootObject.cs @@ -108,7 +108,16 @@ namespace Demo.Game { using (Profiler.BeginZone($"{type.Name}.ScriptUpdate")) foreach (var item in items) - item.ScriptUpdate(currentTime, deltaTime, tickType); + { + try + { + item.ScriptUpdate(currentTime, deltaTime, tickType); + } + catch (Exception ex) + { + Debug.LogException(ex, item); + } + } } } } diff --git a/Assets/Scripts/Framework/ScriptableObject.cs b/Assets/Scripts/Framework/ScriptableObject.cs index 0b8cbe1..e718534 100644 --- a/Assets/Scripts/Framework/ScriptableObject.cs +++ b/Assets/Scripts/Framework/ScriptableObject.cs @@ -659,27 +659,35 @@ namespace Demo private static Color CacheLastFocusImageOriginColor = new(1, 1, 1, 0.01f); private static Color FocusImageColor = new(1f, 47f / 51f, 0.0156862754f, 0.1f); + [Content, SerializeField] private bool IsEnableTimelineItem = false; + + [Convention.RScript.Variable.Attr.Method] + public void EnableTimelineItem() + { + IsEnableTimelineItem = true; + } + protected override IEnumerator DoSomethingDuringApplyScript() { yield return base.DoSomethingDuringApplyScript(); - if (MyTimelineEntry == null) - { - MyTimelineEntry = TimelineWindow.CreateRootItemEntries(1)[0]; - MyTimelineItem = MyTimelineEntry.ref_value.GetComponent(); - } - MyTimelineItem.title = ScriptName; - MyTimelineItem.RawButton.onClick.RemoveAllListeners(); - MyTimelineItem.AddListener(() => - { - HierarchyWindow.instance.MakeFocusOn(MyHierarchyItem.GetHierarchyItem()); - if (CacheLastFocusImage != null) - CacheLastFocusImage.color = CacheLastFocusImageOriginColor; - CacheLastFocusImage = MyHierarchyItem.GetHierarchyItem().ButtonGameObject.GetComponent(); - CacheLastFocusImage.color = FocusImageColor; - }); - SetupTimelineItem(MyTimelineItem); - // 暂时的逻辑是总是展示的 + if (IsEnableTimelineItem) { + if (MyTimelineEntry == null) + { + MyTimelineEntry = TimelineWindow.CreateRootItemEntries(1)[0]; + MyTimelineItem = MyTimelineEntry.ref_value.GetComponent(); + } + MyTimelineItem.title = ScriptName; + MyTimelineItem.RawButton.onClick.RemoveAllListeners(); + MyTimelineItem.AddListener(() => + { + HierarchyWindow.instance.MakeFocusOn(MyHierarchyItem.GetHierarchyItem()); + if (CacheLastFocusImage != null) + CacheLastFocusImage.color = CacheLastFocusImageOriginColor; + CacheLastFocusImage = MyHierarchyItem.GetHierarchyItem().ButtonGameObject.GetComponent(); + CacheLastFocusImage.color = FocusImageColor; + }); + SetupTimelineItem(MyTimelineItem); TimelineScriptObjectWhichOnShow.Add(this); } } @@ -710,6 +718,7 @@ namespace Demo { base.UpdateTicks(currentTime, deltaTime, tickType); // 存在严重的性能开销, 在解决之前将不会允许其快速自动更新 + if (IsEnableTimelineItem) { if (UIResizeOnTimelineCount > 0.1 || tickType != TickType.Update) { diff --git a/Assets/Scripts/Framework/ScriptableObjectInstantiate/DefaultScriptableObjectInstantiate.cs b/Assets/Scripts/Framework/ScriptableObjectInstantiate/DefaultScriptableObjectInstantiate.cs index f1289c7..3bd4da1 100644 --- a/Assets/Scripts/Framework/ScriptableObjectInstantiate/DefaultScriptableObjectInstantiate.cs +++ b/Assets/Scripts/Framework/ScriptableObjectInstantiate/DefaultScriptableObjectInstantiate.cs @@ -61,6 +61,7 @@ namespace Demo { $"{nameof(SplineTrackRenderer)}",SplineTrackRenderer.Make}, { $"{nameof(SplineTubeRenderer)}",SplineTubeRenderer.Make}, { $"{nameof(SplineSurfaceRenderer)}",SplineSurfaceRenderer.Make}, + { $"{nameof(SplineRenderer)}",SplineRenderer.Make}, }; public static Dictionary> JudgementInstantiate = new() diff --git a/Assets/Scripts/Framework/Updatement.cs b/Assets/Scripts/Framework/Updatement.cs index 61867b9..9faac30 100644 --- a/Assets/Scripts/Framework/Updatement.cs +++ b/Assets/Scripts/Framework/Updatement.cs @@ -38,7 +38,7 @@ namespace Demo.Game } public int Content = 0; - private List Entries = new(); + private readonly List Entries = new(); public UpdatementCompiledEntries CompiledEntries; protected abstract void UpdateData(DataType data); protected abstract DataType Lerp(DataType begin, DataType end, float t); @@ -77,7 +77,6 @@ namespace Demo.Game index++; } Entries.Clear(); - Entries = null; } private void UpdateEntry(int start, float percent) @@ -101,7 +100,9 @@ namespace Demo.Game public override void ResetEnterGameStatus() { - base.ResetEnterGameStatus(); + base.ResetEnterGameStatus(); + if (CompiledEntries.Count <= 1) + return; UpdateEntry(0, 0); } @@ -118,6 +119,8 @@ namespace Demo.Game float GetPercentValue() { + if (Content + 1 == CompiledEntries.Count) + return 1; return (currentTime - CompiledEntries.TimePoints[Content]) / (CompiledEntries.TimePoints[Content + 1] - CompiledEntries.TimePoints[Content]); } @@ -137,14 +140,11 @@ namespace Demo.Game default: if (CompiledEntries.TimePoints[0] > currentTime) return; - if (Content + 1 >= CompiledEntries.Count) - return; - if (CompiledEntries.TimePoints[Content + 1] < currentTime) + if (Content + 1 < CompiledEntries.Count && CompiledEntries.TimePoints[Content + 1] < currentTime) Content++; - if (Content + 1 >= CompiledEntries.Count) - UpdateEntry(Content, 1); - else - UpdateEntry(Content, GetPercentValue()); + if (Content + 1 > CompiledEntries.Count) + return; + UpdateEntry(Content, GetPercentValue()); break; } }