该文来自:http://www.omuying.com/article/123.aspx
功能代码:
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), "在舞台上单击/双击查看输出!");
}
}
源代码 位于:http://www.omuying.com/article/123.aspx