Unity 监听Button interactable
问题
需要监听Button的是否响应事件, 做出对应的修改
解决
方法一
继承Button, 重写按钮状态改变方法
public class MyButton : Button
{
public Action<bool> InteractableChanged;
protected SelectionState PrevState;
protected override void DoStateTransition(SelectionState state, bool instant)
{
base.DoStateTransition(state, instant);
if (PrevState != state)
{
if (PrevState == SelectionState.Disabled)
{
Debug.Log(interactable);
InteractableChanged?.Invoke(interactable);
}
else if (state == SelectionState.Disabled)
{
Debug.Log(interactable);
InteractableChanged?.Invoke(interactable);
}
PrevState = state;
}
}
}
方法二
引入中间层, 继承或者不继承Button都可以实现
public class MyButton : Button
{
public Action<bool> InteractableChanged;
public bool MyInteractable
{
get
{
return interactable;
}
set
{
if (value != interactable)
{
interactable = value;
OnInteractableChanged(interactable);
}
}
}
protected void OnInteractableChanged(bool interactable)
{
InteractableChanged?.Invoke(interactable);
}
}