From 597e97c5d7bc6e2e55c36689bc9134893b376d32 Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Tue, 21 Jul 2026 17:42:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(bodymodule):=20=E5=88=87=E5=89=B2=E5=85=A5?= =?UTF-8?q?=E5=9C=BA=E5=90=8C=E6=AD=A5=E5=85=A8=E9=83=A8=E6=A8=A1=E5=9D=97?= =?UTF-8?q?CutText?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../FixSystemNew/BodyModule/BodyModuleSystem.cs | 15 +++++++++++++++ .../BodyModule/ModuleConditionVisual.cs | 5 +++++ .../FixSystemNew/BodyModule/Modules/BodyModule.cs | 8 +++++++- Assets/Scripts/FixSystemNew/States/CutFixCues.cs | 12 ++++++------ 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/Assets/Scripts/FixSystemNew/BodyModule/BodyModuleSystem.cs b/Assets/Scripts/FixSystemNew/BodyModule/BodyModuleSystem.cs index 2a236fa8c..ee0a0c6cb 100644 --- a/Assets/Scripts/FixSystemNew/BodyModule/BodyModuleSystem.cs +++ b/Assets/Scripts/FixSystemNew/BodyModule/BodyModuleSystem.cs @@ -343,6 +343,21 @@ namespace AibisDream.FixSystem _moduleState = moduleState; } + /// + /// 进入切割特写时,按各模块当前 ModuleCondition 同步所有模块的 CutText 亮灭, + /// 保证特写里每个模块文字都与舱外一致——而不只是被切割的目标模块。 + /// + public void SyncAllCutTextsFromCondition() + { + if (BodyModules == null) return; + + foreach (var module in BodyModules) + { + if (module != null) + module.ApplyCutTextFromCondition(); + } + } + /// /// 从模块中清除 /// diff --git a/Assets/Scripts/FixSystemNew/BodyModule/ModuleConditionVisual.cs b/Assets/Scripts/FixSystemNew/BodyModule/ModuleConditionVisual.cs index a354fb30f..dd6099524 100644 --- a/Assets/Scripts/FixSystemNew/BodyModule/ModuleConditionVisual.cs +++ b/Assets/Scripts/FixSystemNew/BodyModule/ModuleConditionVisual.cs @@ -49,6 +49,11 @@ namespace AibisDream.FixSystem public bool IsConfigured => modulePicRenderer != null && moduleTextRenderer != null; + /// + /// 文字当前的亮/灭状态(含 Damaged 闪烁中的瞬时相位),供切割视图入场时对齐。 + /// + public bool IsTextCurrentlyVisible => moduleTextRenderer != null && moduleTextRenderer.enabled; + private void Awake() { Initialize(); diff --git a/Assets/Scripts/FixSystemNew/BodyModule/Modules/BodyModule.cs b/Assets/Scripts/FixSystemNew/BodyModule/Modules/BodyModule.cs index a2d5f10ac..7a9eef803 100644 --- a/Assets/Scripts/FixSystemNew/BodyModule/Modules/BodyModule.cs +++ b/Assets/Scripts/FixSystemNew/BodyModule/Modules/BodyModule.cs @@ -245,6 +245,10 @@ namespace AibisDream.FixSystem /// public void ApplyCutTextFromCondition() { + // 没有独立 CutText 的模块(如无特写文字的模块)直接跳过,避免起无效闪烁协程。 + if (_cutTextRenderer == null) + return; + StopCutTextFlicker(restoreVisible: false); switch (condition) @@ -253,7 +257,9 @@ namespace AibisDream.FixSystem SetCutTextVisible(true); break; case ModuleCondition.Damaged: - SetCutTextVisible(true); + // 与舱外文字当前的瞬时亮灭相位对齐,而非固定为常亮,避免入场瞬间闪烁不同步 + bool currentlyVisible = conditionVisual == null || conditionVisual.IsTextCurrentlyVisible; + SetCutTextVisible(currentlyVisible); StartCutTextFlicker(); break; case ModuleCondition.PoweredOff: diff --git a/Assets/Scripts/FixSystemNew/States/CutFixCues.cs b/Assets/Scripts/FixSystemNew/States/CutFixCues.cs index 978a4a257..28476e628 100644 --- a/Assets/Scripts/FixSystemNew/States/CutFixCues.cs +++ b/Assets/Scripts/FixSystemNew/States/CutFixCues.cs @@ -32,9 +32,9 @@ namespace AibisDream.FixSystem bodyModule.GetCutSpriteRenderer().color = new Color(1f, 1f, 1f, 1f); bodyModule.GetCutSpriteRenderer().GetComponentInChildren().color = new Color(1f, 1f, 1f, 1f); - // 相机切入前先对齐 CutText,避免过渡期间亮灭与舱外不一致 - bodyModule.ApplyCutTextFromCondition(); } + // 相机切入前对齐所有模块的 CutText(不只是目标模块),避免特写里其它模块文字亮灭与舱外不一致 + bodyModuleSystem.SyncAllCutTextsFromCondition(); yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutEmo); yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); @@ -79,9 +79,9 @@ namespace AibisDream.FixSystem bodyModule.GetCutSpriteRenderer().color = new Color(1f, 1f, 1f, 1f); bodyModule.GetCutSpriteRenderer().GetComponentInChildren().color = new Color(1f, 1f, 1f, 1f); - // 相机切入前先对齐 CutText,避免过渡期间亮灭与舱外不一致 - bodyModule.ApplyCutTextFromCondition(); } + // 相机切入前对齐所有模块的 CutText(不只是目标模块),避免特写里其它模块文字亮灭与舱外不一致 + bodyModuleSystem.SyncAllCutTextsFromCondition(); yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutMemory); yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); @@ -125,9 +125,9 @@ namespace AibisDream.FixSystem bodyModule.GetCutSpriteRenderer().color = new Color(1f, 1f, 1f, 1f); bodyModule.GetCutSpriteRenderer().GetComponentInChildren().color = new Color(1f, 1f, 1f, 1f); - // 相机切入前先对齐 CutText,避免过渡期间亮灭与舱外不一致 - bodyModule.ApplyCutTextFromCondition(); } + // 相机切入前对齐所有模块的 CutText(不只是目标模块),避免特写里其它模块文字亮灭与舱外不一致 + bodyModuleSystem.SyncAllCutTextsFromCondition(); yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutLogic); yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f);