輸入模塊

輸入模塊

輸入模塊主要涉及到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組件的繼承關系圖

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容