先写一个简化工具
//工具 挂载在需要长按的按钮上
public class EventTriggerListener : EventTrigger
{
public delegate void PointerDelegate(GameObject r_go, PointerEventData r_data,bool iSgo=true);
public delegate void BasePointerDelegate(GameObject r_go, BaseEventData r_data);
public PointerDelegate onClick = null;
public PointerDelegate onDown = null;
public PointerDelegate onEnter = null;
public PointerDelegate onExit = null;
public PointerDelegate onUp = null;
public PointerDelegate onDrag = null;
public PointerDelegate onBeginDrag = null;
public PointerDelegate onEndDrag = null;
static public EventTriggerListener Get(Graphic r_graphic)
{
if (r_graphic != null)
{
return Get(r_graphic.gameObject);
}
return null;
}
static public EventTriggerListener Get(GameObject r_go)
{
if (r_go != null)
{
EventTriggerListener listener = r_go.GetComponent<EventTriggerListener>();
if (listener == null)
{
listener = r_go.AddComponent<EventTriggerListener>();
}
return listener;
}
return null;
}
public override void OnPointerClick(PointerEventData r_eventData)
{
onClick?.Invoke(gameObject, r_eventData);
}
public override void OnPointerDown(PointerEventData r_eventData)
{
onDown?.Invoke(gameObject, r_eventData);
}
public override void OnPointerEnter(PointerEventData r_eventData)
{
onEnter?.Invoke(gameObject, r_eventData);
}
public override void OnPointerExit(PointerEventData r_eventData)
{
onExit?.Invoke(gameObject, r_eventData);
}
public override void OnPointerUp(PointerEventData r_eventData)
{
onUp?.Invoke(gameObject, r_eventData);
}
public override void OnBeginDrag(PointerEventData r_eventData)
{
base.OnBeginDrag(r_eventData);
onBeginDrag?.Invoke(gameObject, r_eventData);
}
public override void OnDrag(PointerEventData eventData)
{
base.OnDrag(eventData);
onDrag?.Invoke(gameObject, eventData);
}
public override void OnEndDrag(PointerEventData eventData)
{
base.OnEndDrag(eventData);
onEndDrag?.Invoke(gameObject, eventData);
}
}
调用的时候
/// <summary>
/// 升级
/// </summary>
EventTriggerListener _btnUpgrade;
float m_timer = 0;
float time = 0;
float CanLastTimer = 0.5f;//按下的时间长度
//按下的时候开始计时
_btnUpgrade.onDown = (GameObject r_go , UnityEngine.EventSystems.PointerEventData r_data , bool isGae) =>
{
AsyncMouseDown ();
};
/// <summary>
/// 检测
/// </summary>
private void AsyncMouseDown ()
{
m_timer = 0;
while ( true )
{
if ( this == null ) return;
try
{
if ( Input.GetMouseButton (0) )
{
m_timer += CanLastTimer;
if ( m_timer >= 1f )
{
Debug.Log ("长按了");
OnBtnUpgradeTouched ();需要执行的方法
return;
}
}
else
{
m_timer = 0;
if ( ( Time.realtimeSinceStartup - time ) < 1f )
{
return;
}
OnBtnUpgradeTouched ();需要执行的方法
return;
}
}
catch ( Exception e ) { Debug.LogError (e.Message); return; }
}
}