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));
}
本站公眾號
   歡迎關注本站公眾號,獲取更多信息