Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(209评价)
价格: 3620.00元
请问注册实件的问题,谢谢!
道法自然发起了问答2017-05-28
3
回复
560
浏览

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
/// <summary>
/// 自动添加UI监听事件工具类
/// </summary>
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;

    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);
        Debug.Log("111111111");
    }
    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 eventData)
    {
        if (onSelect != null) onSelect(gameObject);
    }
    public override void OnUpdateSelected(BaseEventData eventData)
    {
        if (onUpdateSelect != null) onUpdateSelect(gameObject);
    }
}

 

//ui按钮点击事件管理类

public class UI_Button : MonoBehaviour{

//按钮物体列表
public List<GameObject> go_list;

 void Start()
    {
        foreach (GameObject item in go_list)
        {
            EventTriggerListener.Get(item).onClick = OnButtonClick;
        }
    }

 public void OnButtonClick(GameObject go)
    {

        //禁用自身的组件

        go.GetComponent<Button>().enabled = false;
        go.GetComponent<Button>().interactable = false;
      

        //运行方法    
    }

}

 

每次点击按钮,运行事件前都先禁用相关的按钮组件,以防在事件没有运行完,误操作再次点击,

奇怪的是明明组件都禁用了,点击按钮还是能运行事件,在Console里还会输出Debug.Log("111111111");

请问这是为什么,谢谢!

所有回复
  • siki 2017-05-28

    组件禁用了不影响注册的方法的执行的, 组件禁用,这个组件上的脚本的update方法就不再执行了

    • 道法自然 2017-05-28

      如何才能禁用事件?难道要 EventTriggerListener.Get(item).onClick -= OnButtonClick;?

      (0) 回复
    • siki 2017-05-28

      回复 @ 道法自然: 恩恩 也可以吧button.interactable = false让按钮不可点击

      (0) 回复
    还有-3条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!