【unity游戏开发——编辑器扩展】Event公共类检查和处理用户输入
本文介绍了如何在Unity编辑器扩展开发中使用Event类来检测和处理用户输入。Event类专门用于编辑模式下,可以在OnGUI和OnSceneView中使用,帮助开发者监听鼠标、键盘等输入事件。文章通过一个示例代码展示了如何检测按键、鼠标事件、滚轮操作、拖拽事件等,并提供了详细的注释说明。此外,文章还推荐了多个Unity开发相关的专栏,涵盖了从入门到精通的C#、Unity通用、3D、2D、实战、
·
注意
:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。
前言
- Event公共类提供了许多属性和方法,允许你检查和处理用户输入,主要用于在Unity编辑器拓展开发中。
- 因为Input相关内容需要在运行时才能监听输入,而Event专门提供给编辑模式下使用,可以帮助我们检测鼠标键盘输入等事件相关操作。
- 在
OnGUI
和OnSceneView
中都能使用。
官方文档:Event 事件
示例
这里就不多介绍了,代码里都有详细的注释,大家对照着查看效果就行了。
using UnityEditor;
using UnityEngine;
public class EditorEventWindow : EditorWindow
{
[MenuItem("编辑器拓展/自定义窗口拓展/Event自定义窗口")]
private static void OpenEditorGUIUtilityWindow()
{
EditorEventWindow win = EditorWindow.GetWindow<EditorEventWindow>("Event知识面板");
win.Show();
}
private void OnGUI()
{
// 获取当前事件
Event eventCurrent = Event.current;
// alt键是否按下
if (eventCurrent.alt)
Debug.Log("alt键按下了");
// shift键是否按下
if (eventCurrent.shift)
Debug.Log("shift键按下了");
// ctrl键是否按下
if (eventCurrent.control)
Debug.Log("control键按下了");
// 是否是鼠标事件
if (eventCurrent.isMouse)
{
Debug.Log("鼠标相关事件");
// 判断鼠标左中右键
Debug.Log(eventCurrent.button);
// 鼠标位置
Debug.Log("鼠标位置" + eventCurrent.mousePosition);
// 判断输入类型 - 鼠标相关
switch (eventCurrent.type)
{
case EventType.MouseDown:
Debug.Log("鼠标按下");
break;
case EventType.MouseUp:
Debug.Log("鼠标抬起");
break;
case EventType.MouseDrag:
Debug.Log("鼠标拖动");
break;
case EventType.MouseMove:
Debug.Log("鼠标移动");
break;
case EventType.ContextClick:
Debug.Log("右键点击");
break;
}
}
// 判断是否是键盘输入
if (eventCurrent.isKey)
{
Debug.Log("键盘相关事件");
// 获取键盘输入的字符,获取不了一些特殊按键:比如空格、回车、上下左右等
Debug.Log(eventCurrent.character);
// 获取键盘输入对应的KeyCode
switch (eventCurrent.keyCode)
{
case KeyCode.Space:
Debug.Log("空格键输入");
break;
}
// 判断输入类型 - 键盘相关
switch (eventCurrent.type)
{
case EventType.KeyDown:
Debug.Log("键盘按下");
break;
case EventType.KeyUp:
Debug.Log("键盘抬起");
break;
}
}
// 判断是否是滚轮事件
if (eventCurrent.type == EventType.ScrollWheel)
{
Debug.Log("滚轮滚动: " + eventCurrent.delta);
}
// 判断是否是拖拽操作
if (eventCurrent.type == EventType.DragUpdated ||
eventCurrent.type == EventType.DragPerform ||
eventCurrent.type == EventType.DragExited)
{
Debug.Log("拖拽操作: " + eventCurrent.type);
}
// 是否锁定大写 对应键盘上caps键是否开启
if (eventCurrent.capsLock)
Debug.Log("大小写锁定开启");
else
Debug.Log("大小写锁定关闭");
// Windows键或Command键是否按下
if (eventCurrent.command)
Debug.Log("PC win键按下 或 Mac Command键按下");
// 键盘事件 字符串
// 可以用来判断是否触发了对应的键盘事件
if (eventCurrent.commandName == "Copy")
{
Debug.Log("按下了ctrl + c");
}
if (eventCurrent.commandName == "Paste")
{
Debug.Log("按下了ctrl + v");
}
if (eventCurrent.commandName == "Cut")
{
Debug.Log("按下了ctrl + x");
}
// 鼠标间隔移动距离
Debug.Log("鼠标间隔移动距离:" + eventCurrent.delta);
// 是否是功能键输入,功能键指小键盘中的 方向键, page up, page down, backspace等等
if (eventCurrent.functionKey)
Debug.Log("有功能按键输入");
// 小键盘是否开启
if (eventCurrent.numeric)
Debug.Log("小键盘是否开启");
// 避免组合键冲突
// 在处理完对应输入事件后,调用该方法,可以阻止事件继续派发,放置和Unity其他编辑器事件逻辑冲突
eventCurrent.Use();
}
}
效果
专栏推荐
完结
好了,我是向宇
,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
更多推荐
所有评论(0)