using UnityEngine; using UnityEngine.EventSystems; namespace AxiInputSP.UGUI { public class AxiIptButton : UnityEngine.UI.Button { enum AxiButtonState { None, KeyUp, KeyDown, KeyHold } AxiButtonState m_state = AxiButtonState.None; /// <summary> /// 键值(支持组合键) /// </summary> [SerializeField] public AxiInputUGuiBtnType[] axiBtnTypeList; public bool GetKey() { return m_state >= AxiButtonState.KeyDown; } public bool GetKeyUp() { return m_state == AxiButtonState.KeyUp; } public bool GetKeyDown() { return m_state == AxiButtonState.KeyDown; } public override void OnPointerDown(PointerEventData eventData) { base.OnPointerDown(eventData); //如果之前帧是KeyUp或None,则为KeyDown|KeyHold if (m_state <= AxiButtonState.KeyUp) m_state = AxiButtonState.KeyDown; //如果之前帧是KeyDown,则为KeyHold else if (m_state == AxiButtonState.KeyDown) m_state = AxiButtonState.KeyHold; } public override void OnPointerUp(PointerEventData eventData) { base.OnPointerUp(eventData); //如果之前帧是KeyDown|KeyHold,则为KeyUp|None if (m_state >= AxiButtonState.KeyDown) m_state = AxiButtonState.KeyUp; //如果之前帧是KeyUp,则为None else if (m_state == AxiButtonState.KeyUp) m_state = AxiButtonState.None; } } }