using UnityEngine; using UnityEngine.UI; /// /// UI 中央调度器:引用所有子面板,绑定 StepManager 事件。 /// 按钮策略:同时绑定 Inspector 引用(旧 RightButtons)和 ExperimentPanel/Navbar 按钮(新 UI), /// 两者均可触发,互不冲突。 /// public class UIManager : MonoBehaviour { [Header("管理器引用")] [SerializeField] private StepManager _stepManager; [SerializeField] private InteractionSystem _interactionSystem; [Header("=== 顶部提示栏 ===")] [SerializeField] private GameObject _tipPanel; [SerializeField] private Text _tipText; [Header("=== 详细操作说明面板 ===")] [SerializeField] private GameObject _detailPanel; [SerializeField] private Text _detailText; [Header("=== 对话气泡 ===")] [SerializeField] private GameObject _dialogueBubble; [SerializeField] private Text _dialogueText; [Header("=== 画中画视频 ===")] [SerializeField] private VideoController _videoController; [Header("=== 仿真导航栏按钮(旧引用 + Navbar)===")] [SerializeField] private Button _btnFullScreen; [SerializeField] private Button _btnPrevious; [SerializeField] private Button _btnNext; [SerializeField] private Button _btnSwitchMode; [SerializeField] private Button _btnReturn; [SerializeField] private Text _btnSwitchModeLabel; [Header("=== 底部进度条 ===")] [SerializeField] private Slider _progressBar; [SerializeField] private Text _progressText; [Header("=== 弹窗 ===")] [SerializeField] private ExamPopup _examPopup; [SerializeField] private ScoreDisplay _scoreDisplay; [Header("=== 底部图标 ===")] [SerializeField] private Button _btnCPR; [SerializeField] private Button _btnFracture; [SerializeField] private Button _btnSprain; [SerializeField] private Button _btnBleeding; [SerializeField] private Button _btnTransport; [Header("=== 固定方式选择(仅骨折固定) ===")] [SerializeField] private GameObject _fixationPanel; [SerializeField] private Button _btnLimbFixation; [SerializeField] private Button _btnSplintFixation; private void Start() { Debug.Log("=== UIManager 初始化开始 ==="); if (_stepManager == null) { _stepManager = FindObjectOfType(); if (_stepManager != null) Debug.Log("UIManager: _stepManager 自动查找成功"); else Debug.LogError("UIManager: _stepManager 未找到!"); } if (_interactionSystem == null) { _interactionSystem = FindObjectOfType(); if (_interactionSystem != null) Debug.Log("UIManager: _interactionSystem 自动查找成功"); } BindEvents(); BindButtons(); // 旧引用(RightButtons 等) BindNavbarButtons(); // 新 Navbar 按钮 Debug.Log("=== UIManager 初始化完成 ==="); } #region Navbar 按钮绑定(始终执行,不依赖 Inspector 引用) private void BindNavbarButtons() { Debug.Log("--- UIManager: 开始绑定 Navbar 按钮 ---"); var experimentPanel = GameObject.Find("ExperimentPanel"); if (experimentPanel == null) { Debug.LogError("UIManager: ExperimentPanel 未找到!无法绑定 Navbar 按钮!"); return; } var navbar = experimentPanel.transform.Find("Navbar"); if (navbar == null) { Debug.LogError("UIManager: ExperimentPanel/Navbar 未找到!无法绑定 Navbar 按钮!"); return; } // FullScreen var btnFS = navbar.Find("FullScreen"); if (btnFS != null) { var btn = btnFS.GetComponent