EventSystem基于Input进鸠,可以對鍵盤各拷,鼠標芥丧,觸摸紧阔,以及自定義輸入進行處理。
EventSystem本身是一個管理控制器续担,核心功能依賴InputModule和Raycaster模塊擅耽。
InputModule用來處理Input數(shù)據(jù),管理事件狀態(tài)物遇,和發(fā)送事件給GameObject乖仇。
Raycaster用來捕獲哪些GameObject需要執(zhí)行事件處理:
Graphic Raycaster 用于UI元素就是繼承自Graphic的對象;
Physics2D Raycaster 用于2D物理碰撞元素,依賴于Collider2D;
Physics Raycaster 用于3D物理碰撞元素询兴,依賴于Collider;
原理
EventSystem對象負責管理所有事件相關(guān)對象乃沙,該對象下掛載了EventSystem組件和StandaloneInputModule組件,前者為管理腳本诗舰,后者為輸入模塊警儒。
Canvas對象下掛載了GraphicRaycaster負責處理射線相關(guān)運算,用戶的操作都會通過射線檢測來映射到UGUI組件上眶根,InputModule將用戶的操作轉(zhuǎn)化為射線檢測冷蚂,Raycaster則找到目標對象并通知EventSystem,最后EventSystem發(fā)送事件讓目標對象進行響應汛闸。
事件響應
方式1:實現(xiàn)IXXHandler接口蝙茶,腳本掛在要點擊的目標對象上面
public class EventTest : MonoBehaviour, IPointerClickHandler, IDragHandler,
IPointerDownHandler, IPointerUpHandler {
public void OnDrag(PointerEventData eventData) {
}
public void OnPointerClick(PointerEventData eventData) {
}
public void OnPointerDown(PointerEventData eventData) {
}
public void OnPointerUp(PointerEventData eventData) {
}
}
方式2:使用EventTrigger組件
EventTrigger組件是一個通用的事件觸發(fā)器,它可以用來管理單個組件上的所有可能觸發(fā)的事件诸老,其使用方法有編輯器設定和動態(tài)設置兩種隆夯。
編輯器設定方法是在指定組件上添加EventTrigger組件,然后為它添加觸發(fā)事件類型别伏,再為指定類型添加回調(diào)方法蹄衷。這種做法的操作很簡單,而且靈活性也相當高厘肮,想要跨腳本調(diào)用方法只需要鼠標拖一拖點一點就好愧口。
想要更好地管理大量的事件觸發(fā)和回調(diào)處理,盡量動態(tài)設置的方案:
protected void setupEventTrigger(GameObject target, UnityAction<BaseEventData> listener,
EventTriggerType type) {
if(target != null) {
EventTrigger trigger = target.GetComponent<EventTrigger>() as EventTrigger;
if(trigger == null) {
trigger = target.AddComponent<EventTrigger>();
}
trigger.triggers = new List<EventTrigger.Entry>();
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = type;
entry.callback = new EventTrigger.TriggerEvent();
entry.callback.AddListener(listener);
trigger.triggers.Add(entry);
}
}
使用
UGUI使用
1类茂、新建UGUI任意組件時耍属,自動添加EventSystem對象(集成了EventSystem組件和StandaloneInputModule組件);
2巩检、Canvas默認掛載了GraphicRaycaster組件厚骗,所以在Canvas對象之下的所有GUI對象都可以通過掛載腳本并且實現(xiàn)一些和事件相關(guān)的接口來處理事件;
3兢哭、參考“事件響應”章節(jié)领舰,實現(xiàn)事件監(jiān)聽與處理;
場景物體使用
1、新建EventSystem對象冲秽;
2舍咖、Camera添加Physics2D Raycaster或者Physics Raycaster組件;
3、參考“事件響應”章節(jié)锉桑,實現(xiàn)事件監(jiān)聽與處理谎仲;