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;