You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.7 KiB
63 lines
1.7 KiB
11 months ago
|
using System;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.Events;
|
||
|
using UnityEngine.EventSystems;
|
||
|
using UnityEngine.UI;
|
||
|
|
||
|
[AddComponentMenu("UI/LongClickButton")]
|
||
|
public class LongClickButton : Button
|
||
|
{
|
||
|
[Serializable]
|
||
|
public class LongClickEvent : UnityEvent { }
|
||
|
|
||
|
[SerializeField]
|
||
|
private LongClickEvent m_onLongClick = null;
|
||
|
public LongClickEvent onLongClick
|
||
|
{
|
||
|
get { return m_onLongClick; }
|
||
|
set { m_onLongClick = value; }
|
||
|
}
|
||
|
|
||
|
private DateTime m_firstTime = default(DateTime);
|
||
|
private DateTime m_secondTime = default(DateTime);
|
||
|
|
||
|
private void Press()
|
||
|
{
|
||
|
if (null != onLongClick)
|
||
|
onLongClick.Invoke();
|
||
|
resetTime();
|
||
|
}
|
||
|
|
||
|
public override void OnPointerDown(PointerEventData eventData)
|
||
|
{
|
||
|
base.OnPointerDown(eventData);
|
||
|
if (m_firstTime.Equals(default(DateTime)))
|
||
|
m_firstTime = DateTime.Now;
|
||
|
}
|
||
|
|
||
|
public override void OnPointerUp(PointerEventData eventData)
|
||
|
{
|
||
|
base.OnPointerUp(eventData);
|
||
|
if (!m_firstTime.Equals(default(DateTime)))
|
||
|
m_secondTime = DateTime.Now;
|
||
|
if (!m_firstTime.Equals(default(DateTime)) && !m_secondTime.Equals(default(DateTime)))
|
||
|
{
|
||
|
var intervalTime = m_secondTime - m_firstTime;
|
||
|
int milliSeconds = intervalTime.Seconds * 1000 + intervalTime.Milliseconds;
|
||
|
if (milliSeconds > 600) Press();
|
||
|
else resetTime();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override void OnPointerExit(PointerEventData eventData)
|
||
|
{
|
||
|
base.OnPointerExit(eventData);
|
||
|
resetTime();
|
||
|
}
|
||
|
|
||
|
private void resetTime()
|
||
|
{
|
||
|
m_firstTime = default(DateTime);
|
||
|
m_secondTime = default(DateTime);
|
||
|
}
|
||
|
}
|