using System; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace Cielonos.Settings.UI { /// /// 按钮型设置条目。不绑定到数据字段,而是执行指定的点击动作。 /// /// 典型用途:打开二级 UIPage(如 Key Binding 页面)、触发重置操作等。 /// 支持鼠标悬停说明面板。 /// /// public class SettingsEntryButton : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler { [SerializeField] private TMP_Text labelText; [SerializeField] private Button button; private Action onClickAction; /// 条目的显示标题。 public string DisplayLabel { get; private set; } /// 条目的说明文本(可为空)。 public string Description { get; private set; } /// 鼠标悬停进入时触发。由 SettingsUIPage 设置。 public Action OnHoverEnter { get; set; } /// 鼠标悬停离开时触发。由 SettingsUIPage 设置。 public Action OnHoverExit { get; set; } /// /// 初始化按钮条目。 /// /// 显示标题。 /// 悬停说明文本(可为空)。 /// 点击按钮时执行的动作。 public void Initialize(string label, string description, Action onClick) { DisplayLabel = label; Description = description; onClickAction = onClick; if (labelText != null) labelText.text = label; if (button != null) button.onClick.AddListener(OnButtonClicked); } private void OnButtonClicked() { onClickAction?.Invoke(); } // ──────────────────── 悬停事件 ──────────────────── public void OnPointerEnter(PointerEventData eventData) { OnHoverEnter?.Invoke(DisplayLabel, Description); } public void OnPointerExit(PointerEventData eventData) { OnHoverExit?.Invoke(); } private void OnDestroy() { if (button != null) button.onClick.RemoveListener(OnButtonClicked); } } }