U3D事件系统总结
U3D事件系統(tǒng)總結
事件系統(tǒng)有三個要素:發(fā)送者,接收者,?轉發(fā)者。
發(fā)送者有兩種,一是相機,二是畫布。發(fā)送者是事件的管理者,發(fā)起者,它們使用射線發(fā)射器來檢測點擊事件:
- 相機的physics Raycaster。
- 畫面的Canvas Raycaster。
發(fā)送者是首要因素,如果不給相機添加physics Raycaster組件,場景中的任何3D物體都不會有射線檢測的計算,揀選事件永遠不會觸發(fā)。
畫面默認都帶有Canvas Raycaster,因此不需要自己添加。只要UI自己處理好接收事件就可以接收消息了。
轉發(fā)者是指觸發(fā)器EventTriger,是接收到事件后對事件的轉發(fā)。如Button的屬性面板上的On Click()就是一個觸發(fā)器。
?
接收者和觸發(fā)者可以是UI或3D物體。只要實現了 IPointerDownHandler,?IPointerUpHandler,?IPointerClickHandler
?等接口就能接收到相關消息。以Button為例,實現UI的事件編寫有三種方式:
- 給Button添加一個腳本,實現IPointerClickHandler的OnPointerClick()接口,就能接收到按鈕的點擊事件。
- 給按鈕添加一個腳本,在腳本中GetComponent<Button>.onClick.AddListener(MyOnClick),點擊按鈕就會調用MyOnClick()的自定義方法。
- 給按鈕添加一個腳本bltListener,里面定義一個函數void OnMyClick(),同時在On Click()區(qū)域添加一個觸發(fā)項:object選Button本身,后面選bltListener.OnMyClick。這是按鈕自己向自己發(fā)送事件。當點擊按鈕時,按鈕將遍歷所有添加的觸發(fā)項,并調用觸發(fā)項指定的腳本。
這三種方式本質上還是第一種方式。后面二種是UGUI實現的包裝,便于使用和UI操作。
對于3D物體,只有使用第一種方式了,是最原始的通用方式。
posted on 2016-10-17 12:14 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結
- 上一篇: C#事件与接口
- 下一篇: U3D 动态创建Prefab的多个实例