Unity Event - OnGUI事件
2026/7/28 14:27:02 网站建设 项目流程

一、Event和OnGUI的关系

Event其实就是指UnityGUI Event,它对应着用户的输入(按钮点击,鼠标事件等);

OnGUI()函数的调用是依赖于Event的,只有接收到事件后,才会调用OnGUI()函数;

二、Event成员

static 属性:current,当前将要被处理的事件;

public 属性:

  • type:事件类型,对应着枚举类型EventType;
  • isMouse / isKey:bool型变量,只读;

三、EventType

Event中有很多事件类型,EventType枚举类型中定义了UnityGUI的输入及处理事件的类型;一部分事件是由系统自动发送,如Repaint,一部分在用户发生交互后系统发送,如KeyDown;

  • Layout:一个layout事件是在其它所有事件之前发送前被发送,用于自动布局内容的初始化工作;
  • Repaint:重绘事件,每一帧会被发送;
  • MouseDown/MouseUp/MouseMove/MouseDrag:点击事件,发送事件后会调用OnGUI()函数;
  • KeyDown/KeyUp:

四、问题收集

1.Getting control 0's position in a group with only 0 controls when doing scrollWheel

在更改控件显式时,会出现以上错误,因为在处理每个事件之前都会发送Layout事件来计算所有的自动布局,如果你更改了自动布局之后又进行了OnGUI()的绘制函数,那么就会出现冲突;如下所示,在Repaint和KeyUp等事件发送前都会发送Layout事件;

解决方式有两种:

  • 从根源解决,将需要改动的控件从自动布局GUILayout换为GUI,这样计算的自动布局就不会发生冲突了;
  • 如果发生了更好,产生了冲突,就不要再进行绘制,免去冲突;只需要在调用GUILayout的控件之前加上Return即可,如下所示;
if (Event.current.type == EventType.KeyUp && Event.current.keyCode == KeyCode.LeftControl) { Debug.Log("control is up"); isFpsOpen = !isFpsOpen; return; }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询