Unity: Unity3D 模拟鼠标单击/双击

来源:互联网 发布:短线是银炒股软件 编辑:程序博客网 时间:2024/04/30 08:09

该文来自: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();// 如果按住数量为 0if(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

0 0
原创粉丝点击