fix: resolve Next/Previous step and UI skipping bugs

This commit is contained in:
yangbear
2026-07-08 09:38:42 +08:00
parent 2018c6813e
commit a33435a827
9 changed files with 553 additions and 83 deletions
+27 -20
View File
@@ -105,7 +105,7 @@ public class UIManager : MonoBehaviour
var btn = btnFS.GetComponent<Button>();
if (btn != null)
{
btn.onClick.AddListener(ToggleFullScreen);
btn.onClick.RemoveListener(ToggleFullScreen); btn.onClick.AddListener(ToggleFullScreen);
Debug.Log("UIManager: Navbar/FullScreen 绑定成功 -> ToggleFullScreen");
}
}
@@ -118,7 +118,7 @@ public class UIManager : MonoBehaviour
var btn = btnPrev.GetComponent<Button>();
if (btn != null)
{
btn.onClick.AddListener(OnPreviousClicked);
btn.onClick.RemoveListener(OnPreviousClicked); btn.onClick.AddListener(OnPreviousClicked);
Debug.Log("UIManager: Navbar/Previous 绑定成功 -> OnPreviousClicked");
}
}
@@ -131,7 +131,7 @@ public class UIManager : MonoBehaviour
var btn = btnNext.GetComponent<Button>();
if (btn != null)
{
btn.onClick.AddListener(OnNextClicked);
btn.onClick.RemoveListener(OnNextClicked); btn.onClick.AddListener(OnNextClicked);
Debug.Log("UIManager: Navbar/Next 绑定成功 -> OnNextClicked");
}
}
@@ -144,7 +144,7 @@ public class UIManager : MonoBehaviour
var btn = btnMode.GetComponent<Button>();
if (btn != null)
{
btn.onClick.AddListener(OnSwitchModeClicked);
btn.onClick.RemoveListener(OnSwitchModeClicked); btn.onClick.AddListener(OnSwitchModeClicked);
Debug.Log("UIManager: Navbar/PracticeMode 绑定成功 -> OnSwitchModeClicked");
}
}
@@ -157,7 +157,7 @@ public class UIManager : MonoBehaviour
var btn = btnBack.GetComponent<Button>();
if (btn != null)
{
btn.onClick.AddListener(OnReturnClicked);
btn.onClick.RemoveListener(OnReturnClicked); btn.onClick.AddListener(OnReturnClicked);
Debug.Log("UIManager: Navbar/BtnBack 绑定成功 -> OnReturnClicked");
}
}
@@ -186,11 +186,11 @@ public class UIManager : MonoBehaviour
private void BindButtons()
{
if (_btnFullScreen != null) { _btnFullScreen.onClick.AddListener(ToggleFullScreen); Debug.Log("UIManager: _btnFullScreen 绑定成功"); }
if (_btnPrevious != null) { _btnPrevious.onClick.AddListener(OnPreviousClicked); Debug.Log("UIManager: _btnPrevious 绑定成功"); }
if (_btnNext != null) { _btnNext.onClick.AddListener(OnNextClicked); Debug.Log("UIManager: _btnNext 绑定成功"); }
if (_btnSwitchMode != null) { _btnSwitchMode.onClick.AddListener(OnSwitchModeClicked); Debug.Log("UIManager: _btnSwitchMode 绑定成功"); }
if (_btnReturn != null) { _btnReturn.onClick.AddListener(OnReturnClicked); Debug.Log("UIManager: _btnReturn 绑定成功"); }
if (_btnFullScreen != null) { _btnFullScreen.onClick.RemoveListener(ToggleFullScreen); _btnFullScreen.onClick.AddListener(ToggleFullScreen); Debug.Log("UIManager: _btnFullScreen 绑定成功"); }
if (_btnPrevious != null) { _btnPrevious.onClick.RemoveListener(OnPreviousClicked); _btnPrevious.onClick.AddListener(OnPreviousClicked); Debug.Log("UIManager: _btnPrevious 绑定成功"); }
if (_btnNext != null) { _btnNext.onClick.RemoveListener(OnNextClicked); _btnNext.onClick.AddListener(OnNextClicked); Debug.Log("UIManager: _btnNext 绑定成功"); }
if (_btnSwitchMode != null) { _btnSwitchMode.onClick.RemoveListener(OnSwitchModeClicked); _btnSwitchMode.onClick.AddListener(OnSwitchModeClicked); Debug.Log("UIManager: _btnSwitchMode 绑定成功"); }
if (_btnReturn != null) { _btnReturn.onClick.RemoveListener(OnReturnClicked); _btnReturn.onClick.AddListener(OnReturnClicked); Debug.Log("UIManager: _btnReturn 绑定成功"); }
// 注意: _btnLimbFixation/_btnSplintFixation 不再在这里绑定 SwitchFixation
// 固定方式选择由 PageController 的 OnFixationSelected 统一处理,避免双重触发污染 StepManager 状态。
@@ -247,12 +247,12 @@ public class UIManager : MonoBehaviour
private void UpdateNavigationButtons()
{
if (_stepManager == null) return;
if (_btnPrevious != null) _btnPrevious.interactable = _stepManager.CurrentStepIndex > 0;
if (_btnPrevious != null) _btnPrevious.interactable = true;
if (_btnNext != null)
{
var label = _btnNext.GetComponentInChildren<Text>();
bool isLast = _stepManager.CurrentStepIndex >= _stepManager.TotalSteps - 1;
if (label != null) label.text = isLast ? "完成" : "下一步";
if (label != null) label.text = "下一步";
}
}
@@ -299,15 +299,15 @@ public class UIManager : MonoBehaviour
Debug.Log($"UIManager: [ToggleFullScreen] 全屏 = {Screen.fullScreen}");
}
private void OnPreviousClicked()
{
Debug.Log("UIManager: [OnPreviousClicked] -> 上一步");
_stepManager?.PreviousStep();
}
private void OnNextClicked()
{
Debug.Log("UIManager: [OnNextClicked] -> 下一步");
Debug.LogError("====== UIManager: 点击了【下一步】按钮! ======");
if (_stepManager == null)
{
_stepManager = FindObjectOfType<StepManager>();
Debug.LogError($"====== UIManager: 重新寻找 StepManager 结果: {_stepManager != null} ======");
}
if (_stepManager != null && _stepManager.Mode == ExperimentMode.Exam)
{
var step = _stepManager.GetCurrentStep();
@@ -317,6 +317,13 @@ public class UIManager : MonoBehaviour
_stepManager?.NextStep();
}
private void OnPreviousClicked()
{
Debug.LogError("====== UIManager: 点击了【上一步】按钮! ======");
if (_stepManager == null) _stepManager = FindObjectOfType<StepManager>();
_stepManager?.PreviousStep();
}
private void OnSwitchModeClicked()
{
if (_stepManager == null) return;