using UnityEngine; using UnityEngine.UI; public class PageController : MonoBehaviour { [Header("=== 三个主页面 ===")] [SerializeField] private GameObject _homePagePanel; [SerializeField] private GameObject _modeSelectPanel; [SerializeField] private GameObject _fixationPanel; [Header("=== 实验页面 ===")] [SerializeField] private GameObject _experimentPanel; [SerializeField] private Button _btnExperimentBack; [Header("=== 实验内 UI(由 UIManager 管理)===")] [SerializeField] private UIManager _uiManager; [Header("=== 首页控件 ===")] [SerializeField] private Button _btnStart; [SerializeField] private Button _btnExit; [Header("=== 模式选择页控件 ===")] [SerializeField] private Button _btnBack; [SerializeField] private Button _btnPracticeMode; [SerializeField] private Button _btnExamMode; [SerializeField] private Text _modeDescText; [Header("=== 固定方式选择页控件 ===")] [SerializeField] private Button _btnFixationBack; [SerializeField] private Button _btnLimbFixation; [SerializeField] private Button _btnSplintFixation; [Header("=== 模式说明文案 ===")] [SerializeField] [TextArea(2, 4)] private string _practiceModeDesc = "模拟练习模式:不限时长,可反复练习。系统不评分,帮助您熟悉实验流程和操作步骤。"; [SerializeField] [TextArea(2, 4)] private string _examModeDesc = "考核评估模式:限定时间,完成后系统自动评分,并提供详细反馈报告。"; [Header("=== 编辑器预览(仅 Editor 模式有效)===")] [SerializeField] private EditorPreviewPage _editorPreview = EditorPreviewPage.None; public enum Page { Home, ModeSelect, Fixation, Experiment } public enum EditorPreviewPage { None, Home, ModeSelect, Fixation, Experiment } private Page _currentPage = Page.Home; private ExperimentMode _selectedMode = ExperimentMode.Learn; private int _lastReturnHomeFrame = -1; private void Start() { Debug.Log("=== PageController 初始化开始 ==="); // 一开始就隐藏鞋子,以免在主页或开场动画时穿帮 HideShose(); var splintFlow = EnsureSplintPracticeFlow(); if (splintFlow != null) splintFlow.StopPractice(); var initialExamFlow = EnsureExamFlow(); if (initialExamFlow != null) initialExamFlow.StopExam(); // 关掉多余AudioListener(只留Main Camera的) var cam2 = GameObject.Find("camera2"); if (cam2 != null) { var al = cam2.GetComponent(); if (al != null) al.enabled = false; } var cam3 = GameObject.Find("camera3"); if (cam3 != null) { var al = cam3.GetComponent(); if (al != null) al.enabled = false; } AutoAssignButtonsByName(); // 绑定首页按钮 if (_btnStart != null) { _btnStart.onClick.RemoveAllListeners(); _btnStart.onClick.AddListener(OnStartClicked); Debug.Log("PageController: _btnStart 绑定成功"); } else Debug.LogError("PageController: _btnStart 未赋值!"); if (_btnExit != null) { _btnExit.onClick.RemoveAllListeners(); _btnExit.onClick.AddListener(OnExitClicked); Debug.Log("PageController: _btnExit 绑定成功"); } else Debug.LogError("PageController: _btnExit 未赋值!"); if (_btnBack != null) { _btnBack.onClick.RemoveAllListeners(); _btnBack.onClick.AddListener(OnModeBackClicked); Debug.Log("PageController: _btnBack 绑定成功"); } else Debug.LogError("PageController: _btnBack 未赋值!"); if (_btnPracticeMode != null) { _btnPracticeMode.onClick.RemoveAllListeners(); _btnPracticeMode.onClick.AddListener(() => OnModeSelected(ExperimentMode.Learn)); Debug.Log("PageController: _btnPracticeMode 绑定成功"); } else Debug.LogError("PageController: _btnPracticeMode 未赋值!"); if (_btnExamMode != null) { _btnExamMode.onClick.RemoveAllListeners(); _btnExamMode.onClick.AddListener(() => OnModeSelected(ExperimentMode.Exam)); Debug.Log("PageController: _btnExamMode 绑定成功"); } else Debug.LogError("PageController: _btnExamMode 未赋值!"); if (_btnFixationBack == null && _fixationPanel != null) { var fb = _fixationPanel.transform.Find("BtnBack"); if (fb != null) { _btnFixationBack = fb.GetComponent