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