using System; using Framework; using PhxhSDK; using UnityEngine; using UnityEngine.UI; /// /// UI窗口基类 - 按钮绑定部分 /// 包含按钮事件绑定、音频处理等功能 /// public abstract partial class UIWindow { #region Button Binding Core /// /// 处理按钮点击的音频逻辑 /// /// 按钮组件 /// 是否播放音频 private void HandleButtonAudio(Button button, bool playAudio) { if (!playAudio) return; var clickAudio = button.GetComponent(); if (clickAudio) { if (clickAudio.IsPlayAudio && !string.IsNullOrEmpty(clickAudio.AudioKey)) { AudioManager.Instance.PlayAudio(clickAudio.AudioKey); } } else { CommonUtilsFramework.PlayUICommonSound(); } } /// /// 绑定按钮点击事件的核心逻辑 /// /// 按钮组件 /// 点击回调 /// 是否播放音频 private void BindButtonCore(Button button, Action action, bool playAudio = true) { if (button is null) return; button.onClick.RemoveAllListeners(); button.onClick.AddListener(() => { if (UIManager.IsUIInputBlocked) return; UIManager.Instance.BlockUIForNormalOperation(); HandleButtonAudio(button, playAudio); action?.Invoke(); }); } /// /// 绑定按钮点击事件的核心逻辑(带参数) /// /// 参数类型 /// 按钮组件 /// 点击回调 /// 参数 /// 是否播放音频 private void BindButtonCore(Button button, Action action, T parameter, bool playAudio = true) { if (button is null) return; button.onClick.RemoveAllListeners(); button.onClick.AddListener(() => { if (UIManager.IsUIInputBlocked) return; UIManager.Instance.BlockUIForNormalOperation(); HandleButtonAudio(button, playAudio); if (parameter == null) { DebugUtil.LogError("=== 传入参数为空! ==="); } action?.Invoke(parameter); }); } #endregion #region Button Binding Public Interface /// /// 通过路径绑定按钮 /// /// 按钮路径 /// 点击回调 /// 是否播放音频 /// 找到的GameObject public Button BindButton(string target, Action action, bool playAudio = true) { GameObject obj = transform.Find(target)?.gameObject; if (obj is not null) { Button button = obj.GetComponent