using System;
using System.Net.NetworkInformation;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UIButton : Button
{
[Serializable]
public class DoubleClickedEvent : UnityEvent { }
[SerializeField]
private DoubleClickedEvent m_onDoubleClick = new DoubleClickedEvent();
//这个是双击成功后激活的事件,脚本在这里挂
public DoubleClickedEvent OnDoubleClick
{
get { return m_onDoubleClick; }
set { m_onDoubleClick = value; }
}
private DateTime m_firstTime;
private DateTime m_secondTime;
int clickCount = 0;
private void Press()
{
if (null != OnDoubleClick)
OnDoubleClick.Invoke();
resetTime();
}
public override void OnPointerDown(PointerEventData eventData)
{
base.OnPointerDown(eventData);
// 按下按钮时对两次的时间进行记录
if (m_firstTime.Equals(default(DateTime)))
{
m_firstTime = DateTime.Now;
}
else
m_secondTime = DateTime.Now;
}
float jiange = 1600;
public override void OnPointerUp(PointerEventData eventData)
{
base.OnPointerUp(eventData);
// 在第二次鼠标抬起的时候进行时间的触发,时差小于1000ms触发
if (!m_firstTime.Equals(default(DateTime)) && !m_secondTime.Equals(default(DateTime)))
{
Debug.Log("CLICK"+clickCount);
var intervalTime = m_secondTime - m_firstTime;
float milliSeconds = intervalTime.Seconds * 1000 + intervalTime.Milliseconds;
if (milliSeconds < jiange)
{
clickCount++;
if (clickCount > 5)
{
clickCount = 0;
Press();
}
}
else
{
resetTime();
clickCount = 0;
}
}
}
private void resetTime()
{
m_firstTime = default(DateTime);
m_secondTime = default(DateTime);
}
}
Unity实现鼠标连击事件,可自定义连双击、三击、无限击
最新推荐文章于 2025-03-02 21:17:36 发布