using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using BaseGames.Core; using BaseGames.Core.Events; namespace BaseGames.UI { /// /// 输入设备图标切换器。 /// 订阅 InputDeviceTypeEventChannelSO,在设备切换时通知场景内所有 InputIconImage 刷新。 /// /// ⚠️ 旧版只支持 KB / 手柄二值切换;新版支持 KeyboardMouse / Xbox / PlayStation / Switch。 /// 通常挂在 UIRoot 上,与 InputDeviceDetector 配合使用。 /// public class InputDeviceIconSwitcher : MonoBehaviour { [Header("Event Channel")] [Tooltip("由 InputDeviceDetector 广播的设备类型事件")] [SerializeField] private InputDeviceTypeEventChannelSO _onDeviceChanged; private readonly CompositeDisposable _subs = new(); private void OnEnable() => _onDeviceChanged?.Subscribe(OnDeviceChanged).AddTo(_subs); private void OnDisable() => _subs.Clear(); private void OnDeviceChanged(InputDeviceType _) { // InputIconImage 已通过订阅 IInputIconService.OnIconSetChanged 自主刷新, // 无需重复调用 RefreshAll()——否则每次设备切换每个 InputIconImage 会执行两次 Refresh。 // 此处保留供将来添加设备切换时的其他 UI 响应(提示动画、音效反馈等)。 } } }