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 去對比的。
這樣其實比較耗性能的。