48 lines
1.5 KiB
C#
48 lines
1.5 KiB
C#
|
|
using System;
|
||
|
|
using UnityEngine;
|
||
|
|
using UnityEngine.UI;
|
||
|
|
|
||
|
|
namespace AlicizaX.UI
|
||
|
|
{
|
||
|
|
/// <summary>
|
||
|
|
/// Graphic 材质状态控制
|
||
|
|
/// 控制 UI 图形组件的材质
|
||
|
|
/// </summary>
|
||
|
|
[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<Graphic>(out var graphic))
|
||
|
|
{
|
||
|
|
_defaultMaterial = graphic.material;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public override void Execute(UXControllerStateRecorder recorder, int entryIndex, int selectionIndex)
|
||
|
|
{
|
||
|
|
if (recorder != null && recorder.TryGetComponent<Graphic>(out var graphic))
|
||
|
|
{
|
||
|
|
graphic.material = (entryIndex == selectionIndex) ? _material : _defaultMaterial;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public override bool Valid(UXControllerStateRecorder recorder)
|
||
|
|
{
|
||
|
|
return recorder != null && recorder.GetComponent<Graphic>() != null;
|
||
|
|
}
|
||
|
|
|
||
|
|
public override string GetDescription()
|
||
|
|
{
|
||
|
|
string matched = _material != null ? _material.name : "无";
|
||
|
|
string defaultVal = _defaultMaterial != null ? _defaultMaterial.name : "无";
|
||
|
|
return $"匹配时: {matched}, 默认: {defaultVal}";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|