unity一些键盘鼠标特殊触发事件总结

 首先是鼠标双击事件,这个只能用OnGUI的方法了,代码如下:

 void OnGUI()
    {
        Event e = Event.current;
        if (e.isMouse && (e.clickCount == 2))
        {
           
            Debug.Log("用户双击了鼠标");
        }
    }


接下来是点击鼠标的左右中键的代码。

注意是点击中键而不是滚动

如下:

 void Update()
    {
        if (Input.GetButton("Fire1"))
        { //LeftMouse是在inputManager中设置的,左键值为mouse 0    
          //   PlayerMove();
            Debug.Log("用户click鼠标左键");
        }
        if (Input.GetButton("Fire3"))
        { //LeftMouse是在inputManager中设置的,左键值为mouse 0    
          //   PlayerMove();
            Debug.Log("用户click鼠标中键");
        }
        if (Input.GetButton("Fire2"))
        { //LeftMouse是在inputManager中设置的,左键值为mouse 0    
          //   PlayerMove();
            Debug.Log("用户click鼠标右键");
        }
    }

上述代码里的Fire1等是unity默认的。

这个默认设置不止是针对鼠标的,同时还说键盘,例如左shift ,左ctrl和alt等。这个可以打开设置自己看到。

位置的路径在unity菜单的Edit--->project setting -->input里。

如下图:

unity一些键盘鼠标特殊触发事件总结_第1张图片


下面说鼠标滚轮的交互。

直接举个例子来说,例如场景里有个cube 。

要实现:滚轮滚动相机的的镜头来拉近和拉远。

把以下脚本绑定到cube上,然后把相机指定上去就OK。滚动的代码就在Update里。

如下:


using UnityEngine;
using System.Collections;

public class followtarget : MonoBehaviour
{
    public GameObject Thirdcamera;

    float distance = 1;
  
    void Update()
    {
        distance -= Input.GetAxis("Mouse ScrollWheel");
        Thirdcamera.transform.position = this.transform.position - Vector3.forward * distance;
    }
}


然后就是键盘双击事件了,

这个官方似乎没有给出方法,所以就自创了。

我规定的是按键盘A键两次按键间隔不超过0.5秒。下面是代码:

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class followtarget : MonoBehaviour
{
    private float timer = 0;
    public enum Clickcount
    {
        firsttime,
        secondtime,
        zerotime
    }

    Clickcount First = Clickcount.zerotime;
    /// 
    /// 键盘双击功能,两次按键间隔时间必须小于0.5秒
    /// 
    void Update()
    {
        timer -= Time.deltaTime;
        if (Input.GetKeyDown(KeyCode.A)&& First == Clickcount.zerotime)
        {
            timer = 0.5f;
            Debug.Log("第一次按下");
            First = Clickcount.firsttime;
           
        }
        if (Input.GetKeyUp(KeyCode.A) && First == Clickcount.firsttime)
        {
            Debug.Log("第一次抬起");
            First = Clickcount.secondtime;
            
        }
        if (timer < 0)
        {
            First = Clickcount.zerotime;
        }

        if (Input.GetKey(KeyCode.A) && First == Clickcount.secondtime&&timer>0f)
        {

            Debug.Log("只有双击出现");
            First = Clickcount.zerotime; 
        }
    }
}



你可能感兴趣的:(unity3D)