UEDL6——Event公共类
UEDL6——Event公共类
本章代码关键字
1 | Event.current //获取当前事件 |
Event
Event
公共类提供了许多属性和方法,允许你检查和处理用户输入,主要用于在Unity编辑器拓展开发中
因为Input
相关内容需要在运行时才能监听输入,而Event
专门提供给编辑模式下使用,可以帮助我们检测鼠标键盘输入等事件相关操作
它在 OnGUI
和 OnSceneView
中都能使用
Event的具体内容参见:
重要API
注意:以下的API全部都是焦点在窗口上时才会触发
-
获取当前事件
Event.current
1
Event eve = Event.current;
-
alt键是否按下
Event.current.alt
1
2if (Event.current.alt)
Debug.Log("alt键按下了!");
-
shift键是否按下
Event.current.shift
1
2if (Event.current.shift)
Debug.Log("shift键按下了!");
-
ctrl键是否按下
Event.current.control
1
2if (Event.current.control)
Debug.Log("ctrl键按下了!");
-
是否是鼠标事件
Event.current.isMouse
1
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.isKey
1
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.capsLock
1
2
3
4
5if (Event.current.capsLock)
Debug.Log("大小写锁定开启");
else
Debug.Log("大小写锁定关闭");
-
Windows键或Command键(苹果使用)是否按下
Event.current.command
1
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.numeric
1
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 |
直接操作设备(手指、笔)静止事件(长时间触地)。 |