UGUI学习 - Button
整体流程
Button
继承自Selectable
、IPointercliClickHandler
、ISubmitHandler
。
外部注册
IPointerClickHandler
IPointerClickHandler
接口仅包含一个OnPointerClick()
方法,当鼠标点击时会调用该接口的方法。而Button
能触发点击事件是因为继承自IPointerClickHandler
接口,并且重写了OnPointerClick
方法。那IPointerClickHandler
接口的方法又是被谁调用的呢?查找引用,发现是ExecuteEvents
类的Execute
方法,并且Execute
方法赋值给s_PointerClickHandler
字段。
没错,ExecuteEvents,和之前我在UGUI学习 - 事件系统、射线检测的分析一致。
AddListener
那么onClick.AddListener()
的本质也可以挖一下,其实就是监听了 public ButtonClickedEvent onClick
。而这个追溯到最底层,就是对一个回调方法队列进行List.Add()
。
Unity调用
也是和之前分析的一样,在Process方法体内进行循环检测、触发OnClick等。
EventSystem
会在Update()
中调用当前可用BaseInputModule
的Process()
方法,该方法会处理鼠标的按下、抬起等事件,当鼠标抬起时调用ReleaseMouse()
方法,并最终调用Execute()
方法并触发IPointerClick
事件。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CodingCodingK Blog!