1. 程式人生 > >Unity: Unity3D 模擬滑鼠單擊/雙擊

Unity: Unity3D 模擬滑鼠單擊/雙擊

該文來自: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