Unity Event - OnGUI事件

Unity Event - OnGUI事件 一、Event和OnGUI的关系Event其实就是指UnityGUI Event它对应着用户的输入按钮点击鼠标事件等OnGUI()函数的调用是依赖于Event的只有接收到事件后才会调用OnGUI()函数二、Event成员static 属性current当前将要被处理的事件public 属性type事件类型对应着枚举类型EventTypeisMouse / isKeybool型变量只读三、EventTypeEvent中有很多事件类型EventType枚举类型中定义了UnityGUI的输入及处理事件的类型一部分事件是由系统自动发送如Repaint一部分在用户发生交互后系统发送如KeyDownLayout一个layout事件是在其它所有事件之前发送前被发送用于自动布局内容的初始化工作Repaint重绘事件每一帧会被发送MouseDown/MouseUp/MouseMove/MouseDrag点击事件发送事件后会调用OnGUI()函数KeyDown/KeyUp四、问题收集1.Getting control 0s 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; }