輸入模塊
輸入模塊主要涉及到BaseInputModule、PointerInputModule、StandaloneInputModule、TouchInputModule這些類。
比如處理觸摸事件時,EventSystem在OnUpdate()方法,執行ProcessTouchEvents()方法時,遍歷所有的input.touchCount(input為BaseInput類),取得Touch對象。Touch對象包括,唯一ID:fingerId,位置信息等。
Touch touch = input.GetTouch(i);
取出的Touch對象,傳入GetTouchPointerEventData方法,
GetTouchPointerEventData(touch, out pressed, out released);
在方法中,pointerData.position = input.position;
eventSystem.RaycastAll(pointerData, m_RaycastResultCache);
通過RaycastAll方法(傳入的PointerEventData的position作為點E,從相機到點E投射一條射線,)獲得到第一個被射線照射到的對象。最后執行ProcessTouchPress()方法。
在處理鼠標事件時,EventSystem在OnUpdate()方法中,執行ProcessMouseEvent()方法,通過GetMousePointerEventData方法獲取鼠標左中右鍵的MouseState,通過RaycastAll方法(傳入的PointerEventData的position作為點E,從相機到點E投射一條射線,)獲得到第一個被左鍵射線照射到的對象,然后執行左鍵的ProcessMousePress(),ProcessMove(),ProcessDrag(),以及中鍵和右鍵的ProcessMousePress(),ProcessDrag().
這些事件是由輸入模塊產生的,而歸根結底大部分是通過Input這個類的各種屬性和靜態方法獲取了數據才生成了事件。
比如:
當鼠標或觸摸進入、退出當前對象時執行pointerEnterHandler、pointerExitHandler。
在鼠標或者觸摸按下、松開時執行pointerDownHandler、pointerUpHandler。
在鼠標或觸摸松開并且與按下時是同一個響應物體時執行pointerClickHandler。
在鼠標或觸摸位置發生偏移(偏移值大于一個很小的常量)時執行beginDragHandler。
在鼠標或者觸摸按下且當前對象可以響應拖拽事件時執行initializePotentialDrag。
對象正在被拖拽且鼠標或觸摸移動時執行dragHandler。
對象正在被拖拽且鼠標或觸摸松開時執行endDragHandler。
鼠標或觸摸松開且對象未響應pointerClickHandler情況下,如果對象正在被拖拽,執行dropHandler。
當鼠標滾動差值大于零執行scrollHandler。
當輸入模塊切換到StandaloneInputModule時執行updateSelectedHandler。(不需要Input類)
當鼠標移動導致被選中的對象改變時,執行selectHandler和deselectHandler。
UI組件的繼承關系圖