Unity3D工具类 - 鼠标单击/双击

来源:互联网 发布:c语言教材 谭浩强 pdf 编辑:程序博客网 时间:2024/04/30 10:26

转自:http://www.omuying.com/article/5624.aspx

using System;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), "在舞台上单击/双击查看输出!");    }}
0 0
原创粉丝点击