Unity: Unity3D 模擬滑鼠單擊/雙擊
阿新 • • 發佈:2019-01-30
該文來自: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