fix(fix-system): 修复记忆修复滑条交互与 Timeline 状态冲突

This commit is contained in:
2026-04-19 14:59:16 +08:00
parent 83acdeaecc
commit 442e419f80
4 changed files with 62 additions and 10 deletions
@@ -106,8 +106,16 @@ namespace AibisDream.FixSystem
// 离开视图时的逻辑
Debug.Log("MemoryView exited.");
if (frequencySlider != null) frequencySlider.LockSlider();
if (claritySlider != null) claritySlider.LockSlider();
if (frequencySlider != null)
{
frequencySlider.SetInteractable(false);
frequencySlider.LockSlider();
}
if (claritySlider != null)
{
claritySlider.SetInteractable(false);
claritySlider.LockSlider();
}
}
private void Awake()
@@ -202,6 +210,33 @@ namespace AibisDream.FixSystem
if (claritySlider != null)
claritySlider.Init(memoryClarityVolume);
ResetPresentationState();
}
/// <summary>
/// 单条记忆播放结束后的复位:不调用 <see cref="MemorySlider.Init"/>(避免再次锁条并触发打开 Timeline),
/// 仅禁用拖动;完整 <see cref="MemorySlider.LockSlider"/> 仅在退出 <see cref="MemoryState"/> 时 <see cref="OnExit"/> 执行。
/// </summary>
private void ResetAfterMemoryFinished()
{
isProcessing = false;
if (isPlayingFaderSound)
{
AudioManager.Instance.StopSfx("event:/ActionFB/mem_fader");
isPlayingFaderSound = false;
}
if (frequencySlider != null)
frequencySlider.SetInteractable(false);
if (claritySlider != null)
claritySlider.SetInteractable(false);
ResetPresentationState();
}
private void ResetPresentationState()
{
if (fadeMaterial != null)
fadeMaterial.SetFloat("_DirectionalDistortionFade", FadeMaterialStartValue);
memoryFinishedSpriteRenderer.color = Color.black;
@@ -221,7 +256,7 @@ namespace AibisDream.FixSystem
PunchTapeManager.Instance.OpenFavoritesPanel();
Init();
ResetAfterMemoryFinished();
EnsurePunchTapeSlotReference();
if (punchTapeSlot != null && punchTapeSlot.punchTape != null)
{
@@ -332,11 +367,15 @@ namespace AibisDream.FixSystem
memoryFinishedSpriteRenderer.color = Color.white;
memoryProcessVolume.weight = 0;
isProcessing = true;
frequencySlider.PrepareForSearch();
claritySlider.PrepareForSearch();
bool freqUnlocked = false;
bool clarityUnlocked = false;
frequencySlider.UnlockSlider(() => freqUnlocked = true);
claritySlider.UnlockSlider(() => clarityUnlocked = true);
yield return new WaitUntil(() => freqUnlocked && clarityUnlocked);
frequencySlider.SetInteractable(true);
claritySlider.SetInteractable(true);
}