using System; using UnityEngine; using UnityEngine.UI; namespace AlicizaX.UI { /// /// Graphic 材质状态控制 /// 控制 UI 图形组件的材质 /// [Serializable] [ControlerStateName("Graphic/Material")] [ControlerStateAttachType(true)] public class GraphicMaterialState : ControllerStateBase { [SerializeField] private Material _material; [HideInInspector] [SerializeField] private Material _defaultMaterial; public override void Init(UXControllerStateRecorder recorder) { if (recorder != null && recorder.TryGetComponent(out var graphic)) { _defaultMaterial = graphic.material; } } public override void Execute(UXControllerStateRecorder recorder, int entryIndex, int selectionIndex) { if (recorder != null && recorder.TryGetComponent(out var graphic)) { graphic.material = (entryIndex == selectionIndex) ? _material : _defaultMaterial; } } public override bool Valid(UXControllerStateRecorder recorder) { return recorder != null && recorder.GetComponent() != null; } public override string GetDescription() { string matched = _material != null ? _material.name : "无"; string defaultVal = _defaultMaterial != null ? _defaultMaterial.name : "无"; return $"匹配时: {matched}, 默认: {defaultVal}"; } } }