您的位置:首页 > 移动开发 > Unity3D

Unity Input.anyKeyDown和模拟键盘按下事件

2017-04-24 22:54 1126 查看
键盘或鼠标事件通常是需要用来响应某个按键按下,然后执行某段逻辑,这里的某个按键通常是事先确定的,比如按esc退出程序,按空格跳跃,鼠标单击选中。

但有的时候是先检测到按键按下,然后再判断是哪个按键,然后再执行逻辑,比如我有一个二十六个英文字母命名的文件夹,但按下某个字母,就读取对应文件夹下的文件。

可以通过Input.anyKeyDown来判断是否有鼠标或键盘按下,并打印对应键值,注意代码应该放在OnGUI方法中。

void OnGUI() {

        if (Input.anyKeyDown)

        {

            Event e = Event.current;

            if (e.isMouse) {

                Debug.Log(e.button);

            }

            if (e.isKey)

            {

                if (e.keyCode == KeyCode.None)

                    return;

                Debug.Log(e.keyCode);

                

            }

        }

    }

有时候我们将一些逻辑绑定在了一个键盘事件上,而在别处我们又需要调用这段代码,我们可以选择将之前的代码写成方法调用一次,也可以选择模拟之前的键盘事件,让这个按键假装被按下了或抬起了。

using System.Collections;

using System.Collections.Generic;

using System.Runtime.InteropServices;

using UnityEngine;

public class CarControllerTest : MonoBehaviour {

    [DllImport("user32.dll", EntryPoint = "keybd_event")]

    public static extern void Keybd_event(

        byte bvk,//虚拟键值 ESC键对应的是27

        byte bScan,//0

        int dwFlags,//0为按下,1按住,2释放

        int dwExtraInfo//0

        );

    // Use this for initialization

    void Start()

    {

    }

// Update is called once per frame
void Update () {

        //用上下箭头来模拟左shift和ctrl事件

        if (Input.GetKeyDown(KeyCode.UpArrow)) {

            Keybd_event(160, 0, 0, 0); 

        }

        if (Input.GetKeyUp(KeyCode.UpArrow)) {

            Keybd_event(160, 0, 2, 0);

        }

        if (Input.GetKeyDown(KeyCode.DownArrow)) {

            Keybd_event(162, 0, 0, 0);

        }

        if (Input.GetKeyUp(KeyCode.DownArrow)) {

            Keybd_event(162, 0, 2, 0);

        }
}

}

这段代码演示了用上下箭头代替了左shift和左ctrl。

160 162是leftshif和leftctrl的键盘按键码

详情可百度 “104键键盘按键码对照”

按键模拟时最好是有对应的按下和抬起,否则会出现意料外的错误
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: