using System; using UnityEngine; namespace AlicizaX.UI { /// /// CanvasGroup 交互状态控制 /// 控制 CanvasGroup 的可交互性和射线检测 /// [Serializable] [ControlerStateName("CanvasGroup/Interactable")] [ControlerStateAttachType(true)] public class CanvasGroupInteractableState : ControllerStateBase { [SerializeField] private bool _interactable = true; [SerializeField] private bool _blocksRaycasts = true; [HideInInspector] [SerializeField] private bool _defaultInteractable = true; [HideInInspector] [SerializeField] private bool _defaultBlocksRaycasts = true; public override void Init(UXControllerStateRecorder recorder) { if (recorder != null && recorder.TryGetComponent(out var canvasGroup)) { _defaultInteractable = canvasGroup.interactable; _defaultBlocksRaycasts = canvasGroup.blocksRaycasts; } } public override void Execute(UXControllerStateRecorder recorder, int entryIndex, int selectionIndex) { if (recorder != null && recorder.TryGetComponent(out var canvasGroup)) { bool isActive = (entryIndex == selectionIndex); canvasGroup.interactable = isActive ? _interactable : _defaultInteractable; canvasGroup.blocksRaycasts = isActive ? _blocksRaycasts : _defaultBlocksRaycasts; } } public override bool Valid(UXControllerStateRecorder recorder) { return recorder != null && recorder.GetComponent() != null; } public override string GetDescription() { return $"匹配时: 可交互={_interactable}, 射线检测={_blocksRaycasts}"; } } }