UNITY_UGUI

UGUI

1. 事件系统-EventSystem

http://www.javashuo.com/article/p-kakgrzne-hc.htmlide

处理与管理点击、键盘输入、触摸等事件this

EventSystem源码声明了spa

private List<BaseInputModule> m_SystemInputModules = new List<BaseInputModule>();
private BaseInputModule m_CurrentInputModule;

BaseInputModule是抽象类
  PointerInputModule继承自BaseInputModule,也是抽象类
    StandaloneInputModule继承自PointerInputModule,面向PC/Mac/Linux standalone平台的输入模块
    TouchInputModule继承自PointerInputModule,面向Android/iOS等移动平台的输入模块.net

EventSystem在每一帧都会处理这些输入模块 -- 调用TickModules(),更新每个InputModule
  遍历m_SystemInputModules,判断这些module是否支持当前平台且可用
  1. 如有符合条件的module,便赋值给m_CurrentInputModule并break;
  2. 若没有符合条件的module,便选取第一个支持当前平台的module做为m_CurrentInputModule
    若m_CurrentInputModule的值发生变化,且m_CurrentInputModule!=null,便调用m_CurrentInputModule.Process()
    该方法会将各类输入事件传递给EventSystem当前选中的GameObject(m_CurrentSelected)
    m_CurrentSelected大部分状况是Selectable组件
      (在设置m_CurrentSelected时,会经过ExecuteEvents类对以前选中的对象执行一个被取消事件OnDeselect(),
      对新选中的对象执行一个被选中事件OnSelect())code

EventSystem的RaycastAll()方法,使用射线从相机到某个点(设为点E)照射在UI上
  而后对被照射到的全部对象进行排序,大体是远近排序。对象

IsPointerOverGameObject()方法用于判断是否点击在UI上blog

EventSystem的public static EventSystem current { get; set; } 属性
  当一个EventSystem组件OnEnable()时会将该对象赋值给current;
  OnDisable()时,若current==this,则会将current赋值为null
  这也是在UnityEditor中有多个EventSystem时会报警告的缘由
排序

2. 执行事件

http://www.javashuo.com/article/p-qlrxdpag-cx.html继承

EventSystem中事件的执行 -- 涉及到EventInterface接口和ExecuteEvents类接口

EventInterface声明了一系列接口,好比IPointerEnterHandler
  一个组件添加IPointerEnterHandler的继承后,并实现OnPointerEnter()方法,即可在鼠标进入对象时,触发回调OnPointerEnter()方法。
  这些接口所有继承自IEventSystemHandler,而IEventSystemHandler也是声明在EventInterface中的接口

这些接口都会在ExecuteEvents中被调用。
  ExecuteEvents是一个静态类,声明了一个delegate EventFunction,这是一个泛型委托,能够是不一样类型的handler
  好比

private static readonly EventFunction<IPointerEnterHandler> s_PointerEnterHandler = Execute;

private static void Execute(IPointerEnterHandler handler, BaseEventData eventData) {
    handler.OnPointerEnter(ValidateEventData<PointerEventData>(eventData));
}
本站公众号
   欢迎关注本站公众号,获取更多信息