UGUI 之 使用EventTrigger 按钮监听事件系统

2021-03-10 10:37发布

创建自己的EventTriggerListener 类,继承自EventTrigger,,,

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.EventSystems;


public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger

{


    public delegate void VoidDelegate(GameObject go);  

    public VoidDelegate onClick;

    public VoidDelegate onSelect;

    public VoidDelegate onBegainDrag;

    public VoidDelegate onDown;

    public VoidDelegate onUp;


    public VoidDelegate onPress;

    public VoidDelegate DesPress;


    static public  EventTriggerListener Get(GameObject go)

    {  

        EventTriggerListener listener = go.GetComponent<EventTriggerListener>();  

        if (listener == null) listener = go.AddComponent<EventTriggerListener>();  

        return listener;  

    }

    public override void OnPointerClick(PointerEventData eventData)

    {

        if (onClick != null)

        {

            onClick(gameObject);

        }

    }

    public override void OnSelect(BaseEventData eventData)

    {

        if (onSelect != null) onSelect(gameObject);

    }


    public override void OnBeginDrag(PointerEventData eventData)

    {

        if (onBegainDrag != null) onBegainDrag(gameObject);

    }

    //public override void OnPointerDown(PointerEventData eventData)

    //{

    //    if (onDown != null) onDown(gameObject);

    //}

    //public override void OnPointerUp(PointerEventData eventData)

    //{

    //    if (onUp != null) onUp(gameObject);

    //}


    public override void OnPointerDown(PointerEventData eventData)

    {

        if (onPress != null)

        {

            onPress(gameObject);

        }

    }

    public override void OnPointerUp(PointerEventData eventData)

    {

        if (DesPress != null)

        {

            DesPress(gameObject);

        }

    }


}

将上面的代码放到自己的项目中,就可以做监听按钮事件了,
在有UGUI的组件的游戏物体都可以使用,,例子如下:

using UnityEngine;

using System.Collections;

using UnityEngine.UI;

using UnityEngine.EventSystems;

using UnityEngine.Events;

public class UIMain : MonoBehaviour {

private Button button;

private Image image;

void Start () 

{

button = this.GetComponent<Button>();

image = this.GetComponent<Image>();

//添加监听

EventTriggerListener.Get(button.gameObject).onClick =OnButtonClick;

EventTriggerListener.Get(image.gameObject).onClick =OnButtonClick;

//取消监听

// Destroy(EventTriggerListener.Get(image.gameObject).GetComponent<EventTriggerListener>()); 

}

 

private void OnButtonClick(GameObject go){

//在这里监听按钮的点击事件

if(go == button.gameObject){

Debug.Log ("DoSomeThings");

}

}

}



————————————————

版权声明:本文为CSDN博主「妳是我改卟了的bug」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Czhenya/article/details/82954859