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键键盘按键码对照”
按键模拟时最好是有对应的按下和抬起,否则会出现意料外的错误
但有的时候是先检测到按键按下,然后再判断是哪个按键,然后再执行逻辑,比如我有一个二十六个英文字母命名的文件夹,但按下某个字母,就读取对应文件夹下的文件。
可以通过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键键盘按键码对照”
按键模拟时最好是有对应的按下和抬起,否则会出现意料外的错误
相关文章推荐
- Unity 模拟键盘按键事件
- C#模拟键盘鼠标事件
- Input表单值改变(非键盘直接输入)后触发事件
- Android自动化测试初探(四): 模拟键盘鼠标事件(Socket+Instrumentation实现)
- 用VB模拟键盘事件的N种方法
- Frame中键盘事件的问题及原因(转flyfeihong 的文章:Swing程序的模拟键盘事件)
- 模拟用户操作Input元素,不会触发相应事件
- 【转】C#模拟键盘鼠标事件
- C#模拟键盘鼠标事件
- C#模拟键盘鼠标事件 SendKeys 的特殊键代码表
- JS//键盘KEYDOWN事件
- 使用SWT模拟鼠标键盘事件
- 使用SWT模拟鼠标键盘事件
- 如何在程序中模拟键盘的按键事件?
- C#模拟键盘鼠标事件
- 用VB模拟键盘事件的N种方法
- C#模拟键盘鼠标事件 SendKeys 的特殊键代码表
- 使用SWT模拟鼠标键盘事件
- QTP模拟鼠标和键盘事件方法
- C#模拟键盘鼠标事件