UGUI事件機制

2021-07-25 04:37:53 字數 1771 閱讀 2202

ugui使用了新的event機制,我們之前在ngui中,為了處理ui的互動,通常是在ui元件掛載的mono上寫onclick(),onpress()這些函式,換到ugui後,unity使用了新的event 機制。但是unity的文件解釋的很亂,這裡整理一下。

這裡面有個主要的模組:

eventsystem,全域性需要有乙個,我們建立乙個ui會自動生成乙個,這是整個事件系統的管理器,通常不需要特殊設定它的引數

inputmodule,他是用來管理輸入裝置的輸入事件,提供乙個抽象層,預設在建立ui時會生成乙個standartinputmodule,這是針對滑鼠鍵盤的輸入管理,如果要支援觸控的移動裝置,我們需要再加乙個touchinputmodule,可以同時加幾個input module,eventsystem會根據裝置自動選擇。

raycaster,他等於是乙個事件的檢測器,因為ugui也是3dui,所有的觸碰選擇都涉及到射線cast,所以在每個canvas上要放置乙個canvasraycast,這個canvas上的ui就可以進行事件檢測,以發出事件,注意ui本身是不需要加入包圍盒元件的(ngui的做法)

然後就是事件的產生和處理,ugui的方式有些類似qt,他有乙個事件event,乙個事件的處理器handler,event加入handler進行listen,當event發生時,handler就會執行,這樣event和handler就連線在了一起,

事件的定義

event的型別是是unityengine.eventsystem.eventtriggertype,我們看下所有支援的event

這裡有很多的pointer事件,所謂了pointer就是對滑鼠和觸控的統一抽象,在滑鼠下滑鼠,在觸控下是觸控,如pointerdrag,是滑鼠或者觸屏的拖拽。

事件的產生

unity的事件是系統負責產生的,我們不能自己模擬,比如當乙個按鈕上觸發了乙個click,unity會自動發出來自這個按鈕的click事件

事件和handler的連線觸發方式

1對於某些ui元件,可以直接設定其對自己產生的事件的handler,如button的onpointerclick

2.對於任何ui元件,都可以使用eventtrigger這個component,這個trigger放置在產生事件的ui元件上,裡面包含了乙個事件的型別,以及這個型別關聯的處理函式,處理函式可以使用兩種函式引數,一種是使用int string簡單型別,一種是使用

baseeventdata

型別,因為當event發生時,會跟隨者把這個事件包裝成乙個

pointereventdata

型別的引數送進來,裡面包含ui事件的詳細資訊,包括滑鼠在哪,而對於前一種簡單型別,在編輯器上可以填寫當事件發生時傳什麼引數,這就好比qt的signal和slot連線。

3.強制讓某個事件發生在某個handler上(也就是強制某個handler執行):呼叫executeevents.execute(target, null, (x,y)=>x.message1());

這個呼叫將執行target身上所有繼承 了icustommessagetarget介面的mono的message1函式,個人認為這個和給target傳送message1 的sendmessage沒什麼區別,可能是我還沒有立即好這個介面。

以上就是在ugui中使用新的event系統進行ui的互動的原理和做法。

mysql事件機制 mysql事件機制 定時任務

定時任務是老生常談了,因為我們總是需要定時修改特定的資料。實現它的方法肯定不止一種,但我在相當長一段時間裡都是用程式編碼去做的,今天突然想到 為什麼一定要採用呼叫的方式?用資料庫自身的能力去實現不是更好麼?通過了解,mysql的事件機制可以完成定時任務,其原理是在指定的時間呼叫指定的儲存過程。現在很...

mysql事件機制 mysql事件機制 定時任務

定時任務是老生常談了,因為我們總是需要定時修改特定的資料。實現它的方法肯定不止一種,但我在相當長一段時間裡都是用程式編碼去做的,今天突然想到 為什麼一定要採用呼叫的方式?用資料庫自身的能力去實現不是更好麼?通過了解,mysql的事件機制可以完成定時任務,其原理是在指定的時間呼叫指定的儲存過程。現在很...

qt 事件機制

什麼是自發事件?哪些型別的事件可以被propagated 或compressed?posting and sending 事件之間有何不同?什麼時候應該呼叫 accept 或是ignore 如果這些問題你還不是很了解,那麼繼續看下去。事件起源 定製事件型別 到現在為至,我們所說的內容不僅僅適用於ke...