转自:http://www.omuying.com/article/5624.aspx
using System;
using UnityEngine;
using System.Collections;
public class MouseResponseManager
{
public static void Register(GameObject objectItem, Action clickCallback, Action doubleCallback)
{
if (objectItem == null)
{
objectItem = new GameObject();
objectItem.name = "MouseResponseItem";
}
MouseResponseItem mouseResponseItem = objectItem.AddComponent<MouseResponseItem>();
mouseResponseItem.Init(clickCallback, doubleCallback);
}
}
public class MouseResponseItem : MonoBehaviour
{
private bool mouseDownStatus;
private int mouseDownCount;
private float lastTime;
private float currentTime;
private Action clickCallback;
private Action doubleCallback;
public void Init(Action clickCallback, Action doubleCallback)
{
this.clickCallback = clickCallback;
this.doubleCallback = doubleCallback;
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if (!this.mouseDownStatus)
{
this.mouseDownStatus = true;
//Debug.Log("Click !");
if (this.clickCallback != null) this.clickCallback();
// 如果按住数量为 0
if (this.mouseDownCount == 0)
{
// 记录最后时间
this.lastTime = Time.realtimeSinceStartup;
}
this.mouseDownCount++;
}
}
if (Input.GetMouseButtonUp(0))
{
//Debug.Log("Up !");
this.mouseDownStatus = false;
}
if (this.mouseDownStatus)
{
//Debug.Log("Hold !");
if (this.mouseDownCount >= 2)
{
this.currentTime = Time.realtimeSinceStartup;
if (this.currentTime - this.lastTime < 0.3f)
{
this.lastTime = this.currentTime;
this.mouseDownCount = 0;
//Debug.Log("Double Click");
if (this.doubleCallback != null) this.doubleCallback();
}
else
{
// 记录最后时间
this.lastTime = Time.realtimeSinceStartup;
this.mouseDownCount = 1;
}
}
}
}
}
测试代码:
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour
{
void Start()
{
MouseResponseManager.Register(null, () =>
{
Debug.Log("click");
}, () => {
Debug.Log("double click");
});
}
void OnGUI()
{
GUI.Label(new Rect(15, 15, 300, 100), "在舞台上单击/双击查看输出!");
}
}