UEDL6——Event公共类
UEDL6——Event公共类
本章代码关键字
1  | Event.current //获取当前事件  | 
Event
Event 公共类提供了许多属性和方法,允许你检查和处理用户输入,主要用于在 Unity 编辑器拓展开发中
因为 Input 相关内容需要在运行时才能监听输入,而 Event 专门提供给编辑模式下使用,可以帮助我们检测鼠标键盘输入等事件相关操作
它在 OnGUI 和 OnSceneView 中都能使用
Event的具体内容参见:
重要API
注意:以下的API全部都是焦点在窗口上时才会触发
- 
获取当前事件
Event.current1
Event eve = Event.current;
 - 
alt键是否按下
Event.current.alt1
2if (Event.current.alt)
Debug.Log("alt键按下了!");
 - 
shift键是否按下
Event.current.shift1
2if (Event.current.shift)
Debug.Log("shift键按下了!");
 - 
ctrl键是否按下
Event.current.control1
2if (Event.current.control)
Debug.Log("ctrl键按下了!");
 - 
是否是鼠标事件
Event.current.isMouse1
2if (Event.current.isMouse)
Debug.Log("鼠标相关事件");按下鼠标上的左键中键右键就会输出该消息

 - 
判断鼠标左中右键
Evnet.current.button (0,1,2 分别代表 左,右,中 如果大于2可能是其他鼠标按键)1
2
3
4
5if (Event.current.isMouse)
{
Debug.Log("鼠标相关事件");
Debug.Log(Event.current.button);
}依次按下左键,中键,右键输出的内容

 - 
鼠标位置
Event.current.mousePosition,输出鼠标相对于窗口坐标系位置的Vector2值1
2
3
4
5
6if (Event.current.isMouse)
{
Debug.Log("鼠标相关事件");
Debug.Log(Event.current.button);
Debug.Log("鼠标位置: " + Event.current.mousePosition);
}焦点在窗口上时,按下鼠标键拖动鼠标

 - 
判断是否是键盘输入
Event.current.isKey1
2
3
4if (Event.current.isKey)
{
Debug.Log("键盘相关事件");
}
 - 
获取键盘输入的字符
Event.current.character输出的是输入的字符
char,输出结果收到是否按下Shift键影响,按下shift键会输出大写字母1
2
3
4
5if (Event.current.isKey)
{
Debug.Log("键盘相关事件");
Debug.Log("Character: " + Event.current.character);
}
 - 
获取键盘输入对应的
KeyCode:Event.current.keyCode输出的是
KeyCode枚举,输出结果不受大小写影响1
2
3
4
5if (Event.current.isKey)
{
Debug.Log("键盘相关事件");
Debug.Log("KeyCode: " + Event.current.keyCode);
}
 - 
判断输入类型
Event.current.type
EventType 枚举和它比较即可,EventType中有常用的鼠标按下抬起拖拽,键盘按下抬起等等类型,
一般会配合它来判断如鼠标键盘的抬起或者按下,具体有哪些事件可看:EventType1
2
3
4if (Event.current.type == EventType.MouseDown)
{
Debug.Log("鼠标按下");
} - 
是否锁定大写 对应键盘上capslock键是否开启
Event.current.capsLock1
2
3
4
5if (Event.current.capsLock)
Debug.Log("大小写锁定开启");
else
Debug.Log("大小写锁定关闭");
 - 
Windows键或Command键(苹果使用)是否按下
Event.current.command1
2if (Event.current.command)
Debug.Log("Windows win键按下 或 Mac Command键按下"); - 
键盘事件 返回的是字符串
Event.current.commandName 可以用来判断是否触发了对应的键盘事件特定返回值代表特定事件,我们之前学习的窗口事件传递也使用了该方法,只是方法名是我们自定义的
- 
Copy:拷贝1
2if (Event.current.commandName == "Copy")
Debug.Log("按下了ctrl + c"); - 
Paste:粘贴1
2if (Event.current.commandName == "Paste")
Debug.Log("按下了ctrl + v"); - 
Cut:剪切1
2if (Event.current.commandName == "Cut")
Debug.Log("按下了ctrl + x"); 
 - 
 - 
鼠标间隔移动距离
Event.current.delta在按下鼠标的键时才会输出移动距离
1
Debug.Log(Event.current.delta);
 - 
是否是功能键输入
Event.current.functionKey功能键指小键盘中的 方向键, page up, page down, backspace等等
1
2if (Event.current.functionKey)
Debug.Log("功能键按下了");
 - 
小键盘是否开启(笔者未能触发,原因不明)
Event.current.numeric1
2if (Event.current.numeric)
Debug.Log("数字小键盘开启"); - 
避免组合键冲突
Event.current.Use()在处理完对应输入事件后,调用该方法,可以阻止事件继续派发,防止和Unity其他编辑器事件逻辑冲突
1
Event.current.Use();
 
EventType
EventType 是枚举,表示 Event 的类型,详细请见:EventType - Unity 脚本 API
| 枚举字段 | 作用 | 
|---|---|
MouseDown | 
按下了鼠标键。 | 
MouseUp | 
释放了鼠标键。 | 
MouseMove | 
移动了鼠标(仅限 Editor 视图)。 | 
MouseDrag | 
拖动了鼠标。 | 
KeyDown | 
按下了一个键盘键。 | 
KeyUp | 
释放了一个键盘键。 | 
ScrollWheel | 
移动了滚轮。 | 
Repaint | 
重绘事件。每一帧都发送一个。 | 
Layout | 
布局事件。 | 
DragUpdated | 
仅限 Editor:拖放操作已更新。 | 
DragPerform | 
仅限 Editor:拖放操作已执行。 | 
DragExited | 
仅限 Editor:拖放操作已退出。 | 
Ignore | 
应忽略 Event。 | 
Used | 
已经处理了事件。 | 
ValidateCommand | 
验证特殊命令(例如复制和粘贴)。 | 
ExecuteCommand | 
执行特殊命令(例如复制和粘贴)。 | 
ContextClick | 
用户已点击了右键(或者在 Mac 上点击了 Control)。 | 
MouseEnterWindow | 
鼠标进入了某个窗口(仅限 Editor 视图)。 | 
MouseLeaveWindow | 
鼠标离开了某个窗口(仅限 Editor 视图)。 | 
TouchDown | 
直接操作设备(手指、笔)触屏。 | 
TouchUp | 
直接操作设备(手指、笔)离开屏幕。 | 
TouchMove | 
直接操作设备(手指、笔)在屏幕上移动(拖动)。 | 
TouchEnter | 
直接操作设备(手指、笔)移动到窗口中(拖动)。 | 
TouchLeave | 
直接操作设备(手指、笔)移出窗口(拖动)。 | 
TouchStationary | 
直接操作设备(手指、笔)静止事件(长时间触地)。 | 
