方案一 事件接口
using UnityEngine;
using UnityEngine.EventSystems;
public class Test : MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IPointerExitHandler
{
private float unitTime = 0.5f;//间隔时间
private bool startClick;//是否在按压按钮
private float recordTime = 0f;//记录时间
private void Update()
{
if (startClick)
{
recordTime += Time.deltaTime;
if (recordTime >= unitTime)
{
Debug.Log("升级了");
recordTime = 0f;
}
}
}
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log("按下");
startClick = true;
}
public void OnPointerUp(PointerEventData eventData)
{
Debug.Log("松开");
startClick = false;
recordTime = 0f;
}
public void OnPointerExit(PointerEventData eventData)
{
Debug.Log("离开了");
startClick = false;
recordTime = 0f;
}
}
方案二 EventTrigger
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
public class Test : MonoBehaviour
{
public GameObject target;
private float unitTime = 0.5f;//间隔时间
private bool startClick;//是否在按压按钮
private float recordTime = 0f;//记录时间
private void Start()
{
List<EventTrigger.Entry> entryList = new List<EventTrigger.Entry>();
//按下
entryList.Add(GetNewEntry(EventTriggerType.PointerDown, (data) =>
{
Debug.Log("按下");
startClick = true;
}));
//松开按钮
entryList.Add(GetNewEntry(EventTriggerType.PointerUp, (data) =>
{
Debug.Log("松开");
startClick = false;
recordTime = 0f;
}));
//离开交互区
entryList.Add(GetNewEntry(EventTriggerType.PointerExit, (data) =>
{
Debug.Log("离开了");
startClick = false;
recordTime = 0f;
}));
EventTrigger trigger = target.AddComponent<EventTrigger> ();
trigger.triggers.AddRange(entryList);
}
private void Update()
{
if (startClick)
{
recordTime += Time.deltaTime;
if (recordTime >= unitTime)
{
Debug.Log("升级了");
recordTime = 0f;
}
}
}
public EventTrigger.Entry GetNewEntry(EventTriggerType type, UnityAction<BaseEventData> callback)
{
EventTrigger.Entry entry = new EventTrigger.Entry ();
entry.eventID = type;
entry.callback.AddListener(callback);
return entry;
}
}