UGUI里的EventListener

EventTrigger

我們知道Button可以添加點(diǎn)擊監(jiān)聽,Slider可以滑動行施,假如我們想給Image添加點(diǎn)擊監(jiān)聽,或者更多的監(jiān)聽事件呢魂那,比如選中蛾号、鼠標(biāo)移入、拖動涯雅。我們可以用到EventTrigger鲜结。EventTrigger里繼承了很多接口,正好可以用來封裝

public class EventTriggerTest : EventTrigger {

    public override void OnPointerClick (PointerEventData eventData) {
        Debug.Log ("OnPointerClick");
    }

    public override void OnPointerEnter (PointerEventData eventData) {
        Debug.Log ("OnPointerEnter");
    }

    public override void OnPointerExit (PointerEventData eventData) {
        Debug.Log ("OnPointerExit");
    }

}

這里重寫了EventTrigger里的3個方法活逆,分別是點(diǎn)擊精刷、鼠標(biāo)移入、鼠標(biāo)移出蔗候,我們把它掛載在一個Image上怒允,運(yùn)行,可以看到锈遥,根據(jù)操作纫事,確實(shí)可以執(zhí)行對應(yīng)的方法。


image.png

EventListener

要是有很多控件都需要綁定所灸,那就需要在里面都掛上這個腳本儿礼,每個腳本都在對應(yīng)的方法下重寫內(nèi)容,這樣顯得過于麻煩庆寺,我們可以就寫一個腳本蚊夫,繼承自EventTrigger,通過委托的形式懦尝,觸發(fā)EventTrigger下的事件是就執(zhí)行委托的方法知纷,具體的方法內(nèi)容在各自的腳本里去實(shí)現(xiàn)就可以了。


public class UIEventListener : EventTrigger {
    public delegate void VoidDelegate (GameObject go);
    public delegate void BoolDelegate (GameObject go, bool isValue);
    public delegate void FloatDelegate (GameObject go, float fValue);
    public delegate void IntDelegate (GameObject go, int iIndex);
    public delegate void StringDelegate (GameObject go, string strValue);

    public VoidDelegate onSubmit;
    public VoidDelegate onClick;
    public BoolDelegate onHover;
    public BoolDelegate onToggleChanged;
    public FloatDelegate onSliderChanged;
    public FloatDelegate onScrollbarChanged;
    public IntDelegate onDrapDownChanged;
    public StringDelegate onInputFieldChanged;

    public override void OnSubmit (BaseEventData eventData) {  //提交
        if (onSubmit != null)
            onSubmit (gameObject);
    }
    public override void OnPointerEnter (PointerEventData eventData) { //鼠標(biāo)移入
        if (onHover != null)
            onHover (gameObject, true);
    }
    public override void OnPointerClick (PointerEventData eventData) { //點(diǎn)擊
        if (onClick != null)
            onClick (gameObject);
        if (onToggleChanged != null)
            onToggleChanged (gameObject, gameObject.GetComponent<Toggle> ().isOn);

    }
    public override void OnPointerExit (PointerEventData eventData) { //鼠標(biāo)移出
        if (onHover != null)
            onHover (gameObject, false);
    }
    public override void OnDrag (PointerEventData eventData) { //拖動
        if (onSliderChanged != null)
            onSliderChanged (gameObject, gameObject.GetComponent<Slider> ().value);
        if (onScrollbarChanged != null)
            onScrollbarChanged (gameObject, gameObject.GetComponent<Scrollbar> ().value);

    }
    public override void OnSelect (BaseEventData eventData) { //選中
        if (onDrapDownChanged != null)
            onDrapDownChanged (gameObject, gameObject.GetComponent<Dropdown> ().value);
    }
    public override void OnUpdateSelected (BaseEventData eventData) { //選中陵霉、每幀更新
        if (onInputFieldChanged != null)
            onInputFieldChanged (gameObject, gameObject.GetComponent<InputField> ().text);
    }
    public override void OnDeselect (BaseEventData eventData) { //不選中
        if (onInputFieldChanged != null)
            onInputFieldChanged (gameObject, gameObject.GetComponent<InputField> ().text);
    }

    public static UIEventListener Get (GameObject go) {
        UIEventListener listener = go.GetComponent<UIEventListener> ();
        if (listener == null) listener = go.AddComponent<UIEventListener> ();
        return listener;
    }
}

試一下把琅轧,我們還是實(shí)現(xiàn)上面的功能,現(xiàn)在不用手動去掛載專門的腳本踊挠,只要在Image的執(zhí)行腳本里添加就可以了乍桂,運(yùn)行后程序會自動添加上UIEventListener.cs冲杀。

public class Test1 : MonoBehaviour {

    // Use this for initialization
    void Start () {
        UIEventListener.Get (gameObject).onClick = OnClick;
        UIEventListener.Get (gameObject).onHover = OnHover;
    }

    // Update is called once per frame
    void Update () { }

    void OnClick (GameObject go) {
        Debug.Log ("OnPointerClick");
    }

    void OnHover (GameObject go, bool _flag) {
        if (_flag) {
            Debug.Log ("OnPointerEnter");
        } else {
            Debug.Log ("OnPointerExit");
        }
    }

}
image.png

不足之處,多謝指正睹酌。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末权谁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子憋沿,更是在濱河造成了極大的恐慌旺芽,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辐啄,死亡現(xiàn)場離奇詭異采章,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)壶辜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門悯舟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人砸民,你說我怎么就攤上這事图谷。” “怎么了阱洪?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵便贵,是天一觀的道長。 經(jīng)常有香客問我冗荸,道長承璃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任蚌本,我火速辦了婚禮盔粹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘程癌。我一直安慰自己舷嗡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布嵌莉。 她就那樣靜靜地躺著进萄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锐峭。 梳的紋絲不亂的頭發(fā)上中鼠,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音沿癞,去河邊找鬼援雇。 笑死,一個胖子當(dāng)著我的面吹牛椎扬,可吹牛的內(nèi)容都是我干的惫搏。 我是一名探鬼主播具温,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼筐赔!你這毒婦竟也來了铣猩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤川陆,失蹤者是張志新(化名)和其女友劉穎剂习,沒想到半個月后蛮位,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體较沪,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年失仁,在試婚紗的時候發(fā)現(xiàn)自己被綠了尸曼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡萄焦,死狀恐怖控轿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拂封,我是刑警寧澤茬射,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站冒签,受9級特大地震影響在抛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜萧恕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一刚梭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧票唆,春花似錦朴读、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至簿煌,卻和暖如春典挑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背啦吧。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工您觉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人授滓。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓琳水,卻偏偏與公主長得像肆糕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子在孝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,093評論 1 32
  • 素材管理 可以直接將圖片(Gif)私沮、聲音(mp3)始赎、動畫、文字等素材從資源瀏覽器拖動到庫中仔燕。 資源Url UIPa...
    52031d47791e閱讀 18,348評論 0 1
  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的晰搀。 ??事件五辽,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,477評論 1 11
  • 以下文章為轉(zhuǎn)載,對理解JavaScript中的事件處理機(jī)制很有幫助外恕,淺顯易懂杆逗,特分享于此。 什么是事件鳞疲? 事件(E...
    jxyjxy閱讀 3,030評論 1 10
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5罪郊? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 27,450評論 1 45