深入 UGUI源碼中的 Hover Exit滑入 滑出 以及背後的事件系統機制

UGUI源碼類圖
UGUI中的 事件派發機制:

在使用UGUI的時候 創建Canvas會自動 創建一個EventSystem 這個EventSystem就是個監聽器(監測器)它會在Update裏檢查 InputMoudle,判斷是否 活躍狀態,是否應該激活它,不是就從List中移除掉,如果是當前的Moudel,,並且需要改變, 就調用Process派發函數,
這裏的BaseInputMoudle 和 GraphicRaycaster是 用來採集用戶行爲的,當用戶 操作時,會檢查位置方向, 賦點觸信息,對其執行光線轉換 再經過一系列的判斷
相當於 是 採集信息器。

採集後 ,InputMoudle會去派發委託事件,給響應器,各種handle 處理,

再通過ExceuteEvents,來進行執行其響應邏輯委託事件,最後派發到button上,Invoke 會執行Onclick的委託。

入口在EventSystem下的Update 函數,
在這裏插入圖片描述

in在這裏插入圖片描述右邊的

BaseInputMoudle的處理 函數, 處理滑入和滑出,

下面是 GraphicRaycaster 裏的投射 方法。具體就是
利用 屏幕上 鼠標點擊的位置 ,Camera.ScreenPointToRay 屏幕位置轉射線
在這裏插入圖片描述
在這裏插入圖片描述

GraphicRaycaster的RayCast 方法 , 添加到List裏面後再進行排序。
就是深度管理啦。
在這裏插入圖片描述

翻譯:
//沿着這棵樹往上走,直到最後進入的和當前進入的之間有一個共同的根
//將退出事件發送到(但不包括)公共根。然後將enter事件發送到
//(但不包括公共根)。
在這裏插入圖片描述
在這裏插入圖片描述
Uniy中的層級面板就是 樹的 結構, 下面是BaseInputMoudle 裏面的 FindCommonRoot函數
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

Enter
在這裏插入圖片描述
在這裏插入圖片描述
Exit
在這裏插入圖片描述
在這裏插入圖片描述
ExecuteEvents 底下的Excute 函數
在這裏插入圖片描述
該委託函數 會傳一個handler 響應器,和 一個 BaseEventData 數據類
響應器 中都有響應 方法handle

關於它的調用:ProcessTouchPress
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
主要信息都存放在PointerEventData裏邊

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
這裏 BaseInputMoudle從當 採集 和派發 兩個作用

在EventSystem Update函數裏 會對所有UnityEvent BaseInputModule 進行監聽
在這裏插入圖片描述
在這裏插入圖片描述
StandaloneInputMoudle: 通過Id去派發
在這裏插入圖片描述
發送更新選擇對象事件
在這裏插入圖片描述
計算和派發 任務 鼠標 狀態改變事件
在這裏插入圖片描述

UGUI Button點擊事件是在 擡起的時候才觸發的。

總結:

在使用UGUI的時候 創建Canvas會自動 創建一個EventSystem 這個EventSystem就是個監聽器(監測器)它會在Update裏檢查 InputMoudle,判斷是否 活躍狀態,是否應該激活它,不是就從List中移除掉,如果是當前的Moudel,,並且需要改變, 就調用Process派發函數, 這裏的BaseInputMoudle 是 用來採集用戶行爲的,當用戶 操作時,會檢查位置方向, 賦點觸信息,對其執行光線轉換
採集器。採集後 ,InputMoudle會去派發委託事件,給響應器,各種handle 處理,再通過ExceuteEvents,來進行執行其響應邏輯委託事件,最後派發到button上,Invoke 會執行Onclick的委託。

這種做法對 編輯的人挺有好的,添加的事件的時候 很好添加,但是 在移除的時候, 是會通過放射 取得MethodInfo 去對比的。
這樣其實比較耗性能的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章