Unity事件系統(tǒng)總結(jié)(EventSystem)

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)聽與處理谎仲;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刨仑,隨后出現(xiàn)的幾起案子郑诺,更是在濱河造成了極大的恐慌,老刑警劉巖杉武,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辙诞,死亡現(xiàn)場離奇詭異,居然都是意外死亡轻抱,警方通過查閱死者的電腦和手機飞涂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祈搜,“玉大人较店,你說我怎么就攤上這事∪菅啵” “怎么了梁呈?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蘸秘。 經(jīng)常有香客問我官卡,道長,這世上最難降的妖魔是什么醋虏? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任寻咒,我火速辦了婚禮,結(jié)果婚禮上颈嚼,老公的妹妹穿的比我還像新娘毛秘。我一直安慰自己,他們只是感情好阻课,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布叫挟。 她就那樣靜靜地躺著,像睡著了一般柑肴。 火紅的嫁衣襯著肌膚如雪霞揉。 梳的紋絲不亂的頭發(fā)上旬薯,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天晰骑,我揣著相機與錄音,去河邊找鬼。 笑死硕舆,一個胖子當著我的面吹牛秽荞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抚官,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼扬跋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凌节?” 一聲冷哼從身側(cè)響起钦听,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倍奢,沒想到半個月后朴上,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡卒煞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年痪宰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畔裕。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡衣撬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扮饶,到底是詐尸還是另有隱情具练,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布甜无,位于F島的核電站靠粪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏毫蚓。R本人自食惡果不足惜占键,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望元潘。 院中可真熱鬧畔乙,春花似錦、人聲如沸翩概。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钥庇。三九已至牍鞠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間评姨,已是汗流浹背难述。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胁后。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓店读,卻偏偏與公主長得像,于是被迫代替她去往敵國和親攀芯。 傳聞我的和親對象是個殘疾皇子屯断,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的殖演。 ??事件,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,500評論 1 11
  • Unity3D塔防開發(fā)流程 配置環(huán)境及場景搭建 編程語言:C#年鸳,略懂些許設計模式剃氧,如果不了解設計模式,BUG Mo...
    Grape_葡萄閱讀 2,950評論 1 3
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,005評論 6 13
  • 我們一生中每天都在不停的輸入和輸出阻星,有身體上的朋鞍,有智力上的。寫作妥箕、培訓滥酥、演講等這些活動屬于信息輸出。有輸出畦幢,必然有...
    正零閱讀 2,149評論 0 5
  • 市區(qū)坎吻,瘦弱不堪的女人剛剛被從暗無天日的地下室中解救出來,這是長達十五年來宇葱,她第一次感受到陽光瘦真,折磨了她十五年的...
    顧辰玖閱讀 911評論 0 1