diff --git a/Assets/000_assets/material/M_SquareFrame 1.mat b/Assets/000_assets/material/M_SquareFrame 1.mat index a6feb037..86b99e71 100644 --- a/Assets/000_assets/material/M_SquareFrame 1.mat +++ b/Assets/000_assets/material/M_SquareFrame 1.mat @@ -213,7 +213,7 @@ Material: - _Dst: 10 - _DstBlend: 0 - _DstBlendAlpha: 0 - - _EdgeValue: 0.83361584 + - _EdgeValue: 0.206462 - _EnvironmentReflections: 1 - _FNLfanxiangkaiguan: 0 - _Face: 1 @@ -258,7 +258,7 @@ Material: - _Mask_scale: 1 - _Metallic: 0 - _OcclusionStrength: 1 - - _Opacity: 0.16638416 + - _Opacity: 0.793538 - _Parallax: 0.005 - _Pass: 0 - _QueueOffset: 0 diff --git a/Assets/AddressableAssetsData/link.xml b/Assets/AddressableAssetsData/link.xml new file mode 100644 index 00000000..d011ce72 --- /dev/null +++ b/Assets/AddressableAssetsData/link.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Assets/AddressableAssetsData/link.xml.meta b/Assets/AddressableAssetsData/link.xml.meta new file mode 100644 index 00000000..20a74f4a --- /dev/null +++ b/Assets/AddressableAssetsData/link.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6ce491c0f528de74dbed99b700a51ea5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FR2_Cache.asset b/Assets/FR2_Cache.asset index 23b52c61..95890627 100644 --- a/Assets/FR2_Cache.asset +++ b/Assets/FR2_Cache.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed2dd59698f192d6eb898626d7285c8ff55010eb8917102efc7f72c89c8e7acf -size 8593072 +oid sha256:45d5de2f81338b8b82a58210e132cac0a41bcaa6d438b3843f1cd4d78754ff02 +size 8593081 diff --git a/Assets/Scripts/Game/GameElements/Track/TrackSubmodules/TrackRendererSubmodule/TrackRendererSubmodule.cs b/Assets/Scripts/Game/GameElements/Track/TrackSubmodules/TrackRendererSubmodule/TrackRendererSubmodule.cs index ff3b883b..d24434bc 100644 --- a/Assets/Scripts/Game/GameElements/Track/TrackSubmodules/TrackRendererSubmodule/TrackRendererSubmodule.cs +++ b/Assets/Scripts/Game/GameElements/Track/TrackSubmodules/TrackRendererSubmodule/TrackRendererSubmodule.cs @@ -24,6 +24,7 @@ namespace Ichni.RhythmGame public bool zWrite; public Vector2 uvScale; public Vector2 uvOffset; + private bool requiresMeshRebuild; #endregion #region [初始化与防御机制] Initialization & Defense @@ -72,17 +73,44 @@ namespace Ichni.RhythmGame { if (meshGenerator == null) return; + bool colorChanged = false; if (meshGenerator.color != color) { meshGenerator.color = color; + colorChanged = true; } - if (forceImmediateRebuild && track.trackTimeSubmodule is not TrackTimeSubmoduleMovable) + if (track.trackTimeSubmodule is TrackTimeSubmoduleMovable) + { + if (colorChanged || forceImmediateRebuild) + { + RequestMeshRebuild(); + } + return; + } + + if (forceImmediateRebuild) { meshGenerator.RebuildImmediate(); } } + public void RequestMeshRebuild() + { + requiresMeshRebuild = true; + } + + public bool ConsumeMeshRebuildRequest() + { + if (!requiresMeshRebuild) + { + return false; + } + + requiresMeshRebuild = false; + return true; + } + protected void SetMesh() { if (track.trackTimeSubmodule is TrackTimeSubmoduleMovable trackTimeSubmoduleMovable) diff --git a/Assets/Scripts/Game/GameElements/Track/TrackSubmodules/TrackTimeSubmodule.cs b/Assets/Scripts/Game/GameElements/Track/TrackSubmodules/TrackTimeSubmodule.cs index 95a51745..8f4a51f5 100644 --- a/Assets/Scripts/Game/GameElements/Track/TrackSubmodules/TrackTimeSubmodule.cs +++ b/Assets/Scripts/Game/GameElements/Track/TrackSubmodules/TrackTimeSubmodule.cs @@ -31,6 +31,11 @@ namespace Ichni.RhythmGame public float trackTotalTime; public float visibleTrackTimeLength; public AnimationCurveType animationCurveType; + private const float ClipChangeEpsilon = 0.0001f; + private bool hasClipState; + private float lastClipFrom; + private float lastClipTo; + #endregion #region [生命周期] Initialization @@ -49,17 +54,54 @@ namespace Ichni.RhythmGame #region [时间运算逻辑] Timing Calculation public void UpdateTrackPart(float songTime) { + CalculateVisibleClip(songTime, out float newTailPercent, out float newHeadPercent); + headPercent = newHeadPercent; + tailPercent = newTailPercent; + + TrackRendererSubmodule rendererSubmodule = track.trackRendererSubmodule; + if (rendererSubmodule == null || rendererSubmodule.meshGenerator == null) + { + return; + } + + bool clipChanged = !hasClipState || + Mathf.Abs(lastClipFrom - tailPercent) > ClipChangeEpsilon || + Mathf.Abs(lastClipTo - headPercent) > ClipChangeEpsilon; + bool rebuildRequested = rendererSubmodule.ConsumeMeshRebuildRequest(); + + if (!clipChanged && !rebuildRequested) + { + return; + } + + rendererSubmodule.meshGenerator.clipFrom = tailPercent; + rendererSubmodule.meshGenerator.clipTo = headPercent; + rendererSubmodule.meshGenerator.RebuildImmediate(); + + hasClipState = true; + lastClipFrom = tailPercent; + lastClipTo = headPercent; + //track.trackPathSubmodule.path.Rebuild(true); + } + + private void CalculateVisibleClip(float songTime, out float tailPercent, out float headPercent) + { + if (songTime <= trackStartTime) + { + tailPercent = 0f; + headPercent = 0f; + return; + } + + if (songTime >= trackEndTime + visibleTrackTimeLength) + { + tailPercent = 1f; + headPercent = 1f; + return; + } + headPercent = GetTrackPercent(songTime); tailPercent = GetTrackPercent(songTime - visibleTrackTimeLength); - - if (track.trackRendererSubmodule != null) - { - track.trackRendererSubmodule.meshGenerator.clipFrom = tailPercent; - track.trackRendererSubmodule.meshGenerator.clipTo = headPercent; - track.trackRendererSubmodule.meshGenerator.RebuildImmediate(); - } - - //track.trackPathSubmodule.path.Rebuild(true); } public float GetTrackPercent(float songTimeInTime) diff --git a/ProfilerCaptures/ichni Official_2026-07-18_12-27-30.data b/ProfilerCaptures/ichni Official_2026-07-18_12-27-30.data new file mode 100644 index 00000000..f82d4d0a Binary files /dev/null and b/ProfilerCaptures/ichni Official_2026-07-18_12-27-30.data differ diff --git a/ProfilerCaptures/ichni Official_2026-07-18_12-27-30.highlights b/ProfilerCaptures/ichni Official_2026-07-18_12-27-30.highlights new file mode 100644 index 00000000..65c433d2 Binary files /dev/null and b/ProfilerCaptures/ichni Official_2026-07-18_12-27-30.highlights differ