Unity Event - OnGUI事件

一、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;
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值