| | |
| | | using UnityEngine.Serialization; |
| | | using UnityEngine.UI; |
| | | |
| | | public class LongPressButton : ButtonEx |
| | | public class LongPressButton : ButtonEx |
| | | { |
| | | public class ButtonPressEvent : UnityEvent { } |
| | | |
| | | //长按监听 |
| | | [FormerlySerializedAs("onPress")] |
| | | [SerializeField] |
| | | private ButtonPressEvent m_OnPress = new ButtonPressEvent(); |
| | | public ButtonPressEvent onPress |
| | | { |
| | | public class ButtonPressEvent : UnityEvent { } |
| | | get { return m_OnPress; } |
| | | set { m_OnPress = value; } |
| | | } |
| | | |
| | | [FormerlySerializedAs("onPress")] |
| | | [SerializeField] |
| | | private ButtonPressEvent m_OnPress = new ButtonPressEvent(); |
| | | public ButtonPressEvent onPress |
| | | [SerializeField] |
| | | float m_LongPressCheckTime = 0.3f; |
| | | public float longPressCheckTime |
| | | { |
| | | get { return m_LongPressCheckTime; } |
| | | set { m_LongPressCheckTime = value; } |
| | | } |
| | | [SerializeField] |
| | | float m_LongPressIntervalTime = 0.1f; |
| | | public float longPressIntervalTime |
| | | { |
| | | get { return m_LongPressIntervalTime; } |
| | | set { m_LongPressIntervalTime = value; } |
| | | } |
| | | |
| | | float m_PressTime = 0.0f; |
| | | float m_PressIntervalTime = 0.0f; |
| | | bool m_LongPress = false; |
| | | bool m_IsButtonDown = false; |
| | | |
| | | public override void OnPointerClick(PointerEventData eventData) |
| | | { |
| | | if (m_LongPress) |
| | | { |
| | | get { return m_OnPress; } |
| | | set { m_OnPress = value; } |
| | | m_LongPress = false; |
| | | return; |
| | | } |
| | | base.OnPointerClick(eventData); |
| | | } |
| | | |
| | | [SerializeField] |
| | | float m_LongPressCheckTime = 0.5f; |
| | | public float longPressCheckTime |
| | | { |
| | | get { return m_LongPressCheckTime; } |
| | | set { m_LongPressCheckTime = value; } |
| | | } |
| | | [SerializeField] |
| | | float m_LongPressIntervalTime = 0.1f; |
| | | public float longPressIntervalTime |
| | | { |
| | | get { return m_LongPressIntervalTime; } |
| | | set { m_LongPressIntervalTime = value; } |
| | | } |
| | | public override void OnPointerDown(PointerEventData eventData) |
| | | { |
| | | base.OnPointerDown(eventData); |
| | | m_PressTime = 0.0f; |
| | | m_PressIntervalTime = 0.0f; |
| | | m_IsButtonDown = true; |
| | | } |
| | | |
| | | float m_PressTime = 0.0f; |
| | | float m_PressIntervalTime = 0.0f; |
| | | bool m_LongPress = false; |
| | | bool m_IsButtonDown = false; |
| | | public override void OnPointerUp(PointerEventData eventData) |
| | | { |
| | | base.OnPointerUp(eventData); |
| | | m_IsButtonDown = false; |
| | | } |
| | | |
| | | public override void OnPointerClick(PointerEventData eventData) |
| | | public override void OnPointerExit(PointerEventData eventData) |
| | | { |
| | | base.OnPointerExit(eventData); |
| | | m_IsButtonDown = false; |
| | | m_LongPress = false; |
| | | } |
| | | |
| | | private void Update() |
| | | { |
| | | if (m_IsButtonDown) |
| | | { |
| | | if (m_LongPress) |
| | | m_PressTime += Time.deltaTime; |
| | | if (m_PressTime < m_LongPressCheckTime) |
| | | { |
| | | m_LongPress = false; |
| | | return; |
| | | } |
| | | base.OnPointerClick(eventData); |
| | | } |
| | | |
| | | public override void OnPointerDown(PointerEventData eventData) |
| | | { |
| | | base.OnPointerDown(eventData); |
| | | m_PressTime = 0.0f; |
| | | m_PressIntervalTime = 0.0f; |
| | | m_IsButtonDown = true; |
| | | } |
| | | |
| | | public override void OnPointerUp(PointerEventData eventData) |
| | | { |
| | | base.OnPointerUp(eventData); |
| | | m_IsButtonDown = false; |
| | | } |
| | | |
| | | public override void OnPointerExit(PointerEventData eventData) |
| | | { |
| | | base.OnPointerExit(eventData); |
| | | m_IsButtonDown = false; |
| | | m_LongPress = false; |
| | | } |
| | | |
| | | private void Update() |
| | | { |
| | | if (m_IsButtonDown) |
| | | if (m_PressIntervalTime >= m_LongPressIntervalTime) |
| | | { |
| | | m_PressTime += Time.deltaTime; |
| | | if (m_PressTime < m_LongPressCheckTime) |
| | | { |
| | | return; |
| | | } |
| | | if (m_PressIntervalTime >= m_LongPressIntervalTime) |
| | | { |
| | | onPress.Invoke(); |
| | | m_PressIntervalTime = 0.0f; |
| | | } |
| | | m_PressIntervalTime += Time.deltaTime; |
| | | m_LongPress = true; |
| | | onPress.Invoke(); |
| | | m_PressIntervalTime = 0.0f; |
| | | } |
| | | m_PressIntervalTime += Time.deltaTime; |
| | | m_LongPress = true; |
| | | } |
| | | } |
| | | |
| | | protected override void OnEnable() |
| | | { |
| | | base.OnEnable(); |
| | | m_LongPress = false; |
| | | m_IsButtonDown = false; |
| | | } |
| | | } |
| | | protected override void OnEnable() |
| | | { |
| | | base.OnEnable(); |
| | | m_LongPress = false; |
| | | m_IsButtonDown = false; |
| | | } |
| | | } |