最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity 按鈕事件封裝操作(EventTriggerListener)

 更新時(shí)間:2021年04月10日 14:32:45   作者:DaLiangChen  
這篇文章主要介紹了Unity 按鈕事件封裝操作(EventTriggerListener),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

我就廢話不多說了,大家還是直接看代碼吧~

using UnityEngine;
using UnityEngine.EventSystems; 
namespace Mx.UI
{
    public class EventTriggerListener :UnityEngine.EventSystems.EventTrigger 
    {
        public delegate void VoidDelegate(GameObject go);
        public VoidDelegate onClick;
        public VoidDelegate onDown;
        public VoidDelegate onEnter;
        public VoidDelegate onExit;
        public VoidDelegate onUp;
        public VoidDelegate onSelect;
        public VoidDelegate onUpdateSelect; 
        /// <summary>
        /// 得到“監(jiān)聽器”組件
        /// </summary>
        /// <param name="go">監(jiān)聽的游戲?qū)ο?lt;/param>
        /// <returns>
        /// 監(jiān)聽器
        /// </returns>
        public static EventTriggerListener Get(GameObject go)
        {
            EventTriggerListener lister = go.GetComponent<EventTriggerListener>();
            if (lister==null)
            {
                lister = go.AddComponent<EventTriggerListener>();                
            }
            return lister;
        }
 
        public override void OnPointerClick(PointerEventData eventData)
        {
            if (onClick != null)
            {
                onClick(gameObject);
            }
        }
 
        public override void OnPointerDown(PointerEventData eventData)
        {
            if (onDown != null)
            {
                onDown(gameObject);
            }
        }
 
        public override void OnPointerEnter(PointerEventData eventData)
        {
            if (onEnter != null)
            {
                onEnter(gameObject);
            }
        }
 
        public override void OnPointerExit(PointerEventData eventData)
        {
            if (onExit != null)
            {
                onExit(gameObject);
            }
        }
 
        public override void OnPointerUp(PointerEventData eventData)
        {
            if (onUp != null)
            {
                onUp(gameObject);
            }
        }
    
        public override void OnSelect(BaseEventData eventBaseData)
        {
            if (onSelect != null)
            {
                onSelect(gameObject);
            }
        }
 
        public override void OnUpdateSelected(BaseEventData eventBaseData)
        {
            if (onUpdateSelect != null)
            {
                onUpdateSelect(gameObject);
            }
        }	
    }//Class_end
}

補(bǔ)充:Unity學(xué)習(xí)筆記——自定義EventTriggerListener事件

通常我們?cè)赨nity給按鈕或者圖片添加EventeTrigger事件都需要手動(dòng)添加組件,或者通過代碼繼承系統(tǒng)提供接口實(shí)現(xiàn)功能。這樣使用起來比較麻煩,所以我參考網(wǎng)上資料總結(jié)寫了一個(gè)自定義的EventTriggerListener類,專門用于添加事件。

EventTriggerListener類,不需要掛載到物體上,繼承EventTrigger,作為Common類直接使用

using UnityEngine;
using UnityEngine.EventSystems; 
public class EventTriggerListener : EventTrigger
{
    public delegate void voidDelegate(GameObject obj);
    public voidDelegate OnBtnDown;
    public voidDelegate OnBtnUp;
    public voidDelegate OnEnter;
    public voidDelegate OnExit;
    public voidDelegate OnStay;
    public voidDelegate OnClick;
    public voidDelegate OnDoubleClick;
    private float t1, t2;
    private bool isEnter = false;
    public void Update()
    {
        if (isEnter)
        {
            if (OnStay != null)
            {
                OnStay(gameObject);
            }
        }
    }
    public static EventTriggerListener Get(GameObject obj)
    {
        EventTriggerListener eventTriggerListener = obj.GetComponent<EventTriggerListener>();
        if (eventTriggerListener == null)
        {
            eventTriggerListener = obj.AddComponent<EventTriggerListener>();
        }
        return eventTriggerListener;
    }
    /// <summary>
    /// 判斷是否是第二次點(diǎn)擊
    /// </summary>
    private bool isTwo = true;
    private bool isOver = true;
    public override void OnPointerDown(PointerEventData eventData)
    {
        if (OnBtnDown != null)
        {
            OnBtnDown(gameObject);
        }
        isTwo = !isTwo;
        if (!isOver)
        {
            return;
        }
        isOver = false;
        Invoke("SelectClick", 0.3f);
       
    }
    public void SelectClick()
    {
        if (isTwo)
        {
            if (OnDoubleClick!=null)
            {
                OnDoubleClick(gameObject);
            }
        }
        else
        {
            if (OnClick!=null)
            {
                OnClick(gameObject);
            }
        }
        isTwo = true;
        isOver = true;
    }
    public override void OnPointerUp(PointerEventData eventData)
    {
        if (OnBtnUp != null)
        {
            OnBtnUp(gameObject);
        }
    }
    public override void OnPointerEnter(PointerEventData eventData)
    {
        if (OnEnter != null)
        {
            OnEnter(gameObject);
        }
        isEnter = true;
    }
    public override void OnPointerExit(PointerEventData eventData)
    {
        if (OnExit != null)
        {
            OnExit(gameObject);
        }
        isEnter = false;
    }
}

以上是最常見的幾種事件,全部事件可以查看EventTrigger類。

使用方法:新建腳本BtnEvent,繼承MonoBehaviour掛載到場(chǎng)景物體中,在Start()周期函數(shù)中給需要添加事件的物體添加事件(我這里直接掛載到需要注冊(cè)事件的按鈕上)其中g(shù)ameObject是需要添加的物體gameObject

 
using UnityEngine; 
public class BtnEvent : MonoBehaviour { 
	void Start () {
        EventTriggerListener.Get(transform.gameObject).OnClick += (gameobj) => { Debug.Log("onclick"); };
        EventTriggerListener.Get(transform.gameObject).OnBtnDown += (gameobj) => { Debug.Log("OnBtnDown"); };
        EventTriggerListener.Get(transform.gameObject).OnBtnUp += (gameobj) => { Debug.Log("OnBtnUp"); };
        EventTriggerListener.Get(transform.gameObject).OnEnter += (gameobj) => { Debug.Log("OnEnter"); };
        EventTriggerListener.Get(transform.gameObject).OnExit += (gameobj) => { Debug.Log("OnExit"); };
        EventTriggerListener.Get(transform.gameObject).OnDoubleClick += (gameobj) => { Debug.Log("OnDoubleClick"); };
        EventTriggerListener.Get(transform.gameObject).OnStay += (gameobj) => { Debug.Log("OnStay"); };
    }	
}

運(yùn)行結(jié)果:

PS:?jiǎn)螕艉碗p擊事件的同時(shí)監(jiān)聽會(huì)有沖突,所以通過Invoke()檢測(cè)300ms內(nèi)點(diǎn)擊次數(shù),每次按鈕按下的時(shí)候檢測(cè)。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Unity UI或3D場(chǎng)景實(shí)現(xiàn)跟隨手機(jī)陀螺儀的晃動(dòng)效果

    Unity UI或3D場(chǎng)景實(shí)現(xiàn)跟隨手機(jī)陀螺儀的晃動(dòng)效果

    這篇文章主要介紹了Unity UI或3D場(chǎng)景實(shí)現(xiàn)跟隨手機(jī)陀螺儀的晃動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C#導(dǎo)出Excel的幾種常見方式及詳細(xì)實(shí)現(xiàn)步驟

    C#導(dǎo)出Excel的幾種常見方式及詳細(xì)實(shí)現(xiàn)步驟

    excel導(dǎo)出在C#代碼中應(yīng)用己經(jīng)很廣泛了,我這里就做些總結(jié),下面這篇文章主要給大家介紹了關(guān)于C#導(dǎo)出Excel的幾種常見方式及詳細(xì)實(shí)現(xiàn)步驟的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 詳解C#設(shè)計(jì)模式編程中生成器模式的使用

    詳解C#設(shè)計(jì)模式編程中生成器模式的使用

    這篇文章主要介紹了詳解C#設(shè)計(jì)模式編程中生成器模式的使用,生成器模式主張創(chuàng)建對(duì)象的過程和對(duì)象的表現(xiàn)應(yīng)該分離開來,需要的朋友可以參考下
    2016-02-02
  • C# OpenFileDialog對(duì)話框控件的使用

    C# OpenFileDialog對(duì)話框控件的使用

    OpenFileDialog是C#中常用的對(duì)話框控件,用于讓用戶選擇文件,本文就來介紹一下OpenFileDialog對(duì)話框控件的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • C#的String轉(zhuǎn)換成float防止精度丟失問題的解決

    C#的String轉(zhuǎn)換成float防止精度丟失問題的解決

    這篇文章主要介紹了C#的String轉(zhuǎn)換成float防止精度丟失問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Unity的IPostBuildPlayerScriptDLLs實(shí)用案例深入解析

    Unity的IPostBuildPlayerScriptDLLs實(shí)用案例深入解析

    這篇文章主要為大家介紹了Unity的IPostBuildPlayerScriptDLLs實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 淺談Unity中的Shader

    淺談Unity中的Shader

    Shader,中文名為著色器,對(duì)很多開發(fā)者來說它是一個(gè)神秘的存在。Shader其實(shí)就是專門用來渲染圖形的一種技術(shù),通過shader,我們可以自定義顯卡渲染畫面的算法,使畫面達(dá)到我們想要的效果
    2021-06-06
  • 深入學(xué)習(xí)C#多線程

    深入學(xué)習(xí)C#多線程

    本文詳細(xì)講解了C#多線程編程的相關(guān)技術(shù),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • C#中Winform獲取文件路徑的方法實(shí)例小結(jié)

    C#中Winform獲取文件路徑的方法實(shí)例小結(jié)

    這篇文章主要介紹了C#中Winform獲取文件路徑的方法,以實(shí)例形式較為詳細(xì)的總結(jié)了WinForm關(guān)于路徑操作的常用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • C#中Razor模板引擎簡(jiǎn)單使用

    C#中Razor模板引擎簡(jiǎn)單使用

    Razor 是一種標(biāo)記語法,可以讓您將基于服務(wù)器的代碼(Visual Basic 和 C#)嵌入到網(wǎng)頁中,本文給大家介紹了C#中Razor模板引擎簡(jiǎn)單使用,需要的朋友可以參考下
    2022-02-02

最新評(píng)論

阳信县| 高雄县| 常山县| 合肥市| 韩城市| 南丹县| 马龙县| 抚松县| 东乌| 京山县| 泰来县| 岳阳市| 靖宇县| 惠州市| 北安市| 昌宁县| 绥中县| 吐鲁番市| 许昌县| 临武县| 白河县| 南开区| 宁波市| 穆棱市| 紫金县| 社会| 宿松县| 远安县| 凯里市| 龙胜| 中方县| 太和县| 潮州市| 新建县| 淮南市| 西平县| 繁昌县| 泰来县| 南通市| 饶阳县| 张家口市|