diff --git a/Assets/Scripts/FixSystem/Memory/MemoryProcess.cs b/Assets/Scripts/FixSystem/Memory/MemoryProcess.cs index 2b71050b2..5c9229562 100644 --- a/Assets/Scripts/FixSystem/Memory/MemoryProcess.cs +++ b/Assets/Scripts/FixSystem/Memory/MemoryProcess.cs @@ -127,7 +127,7 @@ namespace AibisDream.FixSystem private void PrepareMemoryView() { EnsurePunchTapeSlotReference(); - ResolvePunchTapeManager()?.OpenFavoritesPanel(); + PunchTapeManager.Instance.OpenFavoritesPanel(); SetPlayBackgroundVisible(false, 0f); StartStandbyOverlay(); } @@ -141,7 +141,7 @@ namespace AibisDream.FixSystem isPlayingFaderSound = false; } - ResolvePunchTapeManager()?.CloseFavoritesPanel(); + PunchTapeManager.Instance.CloseFavoritesPanel(); CloseMemoryView(); // 离开视图时的逻辑 Debug.Log("MemoryView exited."); @@ -158,19 +158,6 @@ namespace AibisDream.FixSystem } } - private PunchTapeManager ResolvePunchTapeManager() - { - var manager = PunchTapeManager.Resolve(); - if (manager == null) - { - Debug.LogError( - "[MemoryProcess] 未找到 PunchTapeManager。请确认当前 Fix 场景中存在 PunchTapeCanvas。", - this); - } - - return manager; - } - private void SetPlayBackgroundVisible(bool active, float alpha) { if (playBackground == null) @@ -320,20 +307,20 @@ namespace AibisDream.FixSystem } /// - /// 单条记忆播放结束后的复位:不调用 / - /// (避免收起 Timeline),仅禁用拖动并把拉杆视觉回到默认位置; - /// 完整 仅在退出记忆模块时 执行。 + /// 复位拉杆与调谐输出:不调用 / + /// (避免收起 Timeline),仅禁用拖动并把拉杆视觉回到默认位置。 + /// 应在黑幕淡出前调用,避免玩家看到拉杆跳回初始态。 /// - private void ResetAfterMemoryFinished() + private void ResetSlidersAndTuning() { - isProcessing = false; - if (isPlayingFaderSound) { AudioManager.Instance.StopSfx("event:/ActionFB/mem_fader"); isPlayingFaderSound = false; } + AudioManager.Instance.SetSfxParam("event:/Amb/amb_mem_tuning", "is_mem_tuning", 0); + if (frequencySlider != null) { frequencySlider.SetInteractable(false); @@ -345,6 +332,16 @@ namespace AibisDream.FixSystem claritySlider.ResetVisualToDefault(); } + ResetSpriteTuning(); + } + + /// + /// 单条记忆播放结束后的完整复位;完整 仅在退出记忆模块时 执行。 + /// + private void ResetAfterMemoryFinished() + { + isProcessing = false; + ResetSlidersAndTuning(); ResetPresentationState(); } @@ -364,18 +361,21 @@ namespace AibisDream.FixSystem [YarnCommand("MemoryFinished")] public IEnumerator MemoryFinished() { + isProcessing = false; + ResetSlidersAndTuning(); + + // 短闪雪花再淡出黑幕,避免记忆画面硬切 + SetMemoryColor(Color.black); + ShowSearchOverlay(); + yield return new WaitForSeconds(MemoryFinishSnowDuration); + if (playBackground != null) { yield return playBackground.DOFade(0f, DefaultFadeDuration).WaitForCompletion(); playBackground.gameObject.SetActive(false); } - // 短闪雪花再回待机,避免记忆画面硬切 - SetMemoryColor(Color.black); - ShowSearchOverlay(); - yield return new WaitForSeconds(MemoryFinishSnowDuration); - - ResolvePunchTapeManager()?.OpenFavoritesPanel(); + PunchTapeManager.Instance.OpenFavoritesPanel(); ResetAfterMemoryFinished(); EnsurePunchTapeSlotReference(); @@ -404,8 +404,7 @@ namespace AibisDream.FixSystem public IEnumerator PlayMemory(bool useYarn = false, string memName = "") { SetMemoryColor(Color.white); - var punchTapeManager = ResolvePunchTapeManager(); - punchTapeManager?.CloseFavoritesPanel(); + PunchTapeManager.Instance.CloseFavoritesPanel(); if (useYarn) { @@ -438,8 +437,7 @@ namespace AibisDream.FixSystem if (!useYarn) { - if (punchTapeManager == null || - !punchTapeManager.TryGetDefinition(punchTapeSlot.punchTape, out var definition)) + if (!PunchTapeManager.Instance.TryGetDefinition(punchTapeSlot.punchTape, out var definition)) yield break; DialogController.Instance.StartDialogNode(definition.DialogNode); @@ -456,8 +454,7 @@ namespace AibisDream.FixSystem frequencySlider.TargetValue = GetRandomSearchTarget(frequencySlider); claritySlider.TargetValue = GetRandomSearchTarget(claritySlider); - var punchTapeManager = ResolvePunchTapeManager(); - punchTapeManager?.CloseFavoritesPanel(); + PunchTapeManager.Instance.CloseFavoritesPanel(); if (punchTape == null) { @@ -468,8 +465,7 @@ namespace AibisDream.FixSystem _activePunchTape = punchTape; - if (punchTapeManager == null || - !punchTapeManager.TryGetDefinition(_activePunchTape, out var definition)) + if (!PunchTapeManager.Instance.TryGetDefinition(_activePunchTape, out var definition)) { StartStandbyOverlay(); yield break;