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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值