UGUI parte da explicação da interface do evento e uma classe de evento de adição dinâmica muito simples

2: Vá direto ao ponto

Use a interface de eventos para implementar eventos em ugui, como implementar IPointerDownHandler, IPointerClickHandler e outras interfaces de eventos comumente usadas, e há algumas interfaces aqui para explicar, porque eu não sei como usá-las (a imagem acima)

A outra interface IDropHandler implementa OnDrop (eu entendo que a função de recebimento é recomendada para ir à loja de ativos para ver o oficial (Unity Samples: UI) para arrastar, e há um exemplo de arrastar)

Ok, o próximo ponto é aqui, uma maneira muito simples de implementar a adição dinâmica de eventos (a adição dinâmica de eventos vista na Internet é muito problemática, vários retornos de chamada de registro, de qualquer maneira, não é muito conveniente de usar, se você usou o NGUI, você deve conhecer o UITriggerListener para É muito conveniente adicionar eventos dinamicamente) Aqui você pode dar uma olhada na postagem de Yusong (tributo a Yusong) .Clique aqui . Então, quando o usamos novamente, a maioria deles quer saber os dados em PointerEventData, então eu mudei aqui (primeira imagem acima)

E quando o usarmos novamente

Isso é conveniente? ? ? ? ? ?

Finalmente, de acordo com a prática internacional, anexe o código-fonte

 

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class UIEvent : MonoBehaviour,
    ISelectHandler,ISubmitHandler,ICancelHandler,IMoveHandler,IUpdateSelectedHandler,   //要设置选中的物体
    IDropHandler,IDragHandler,IPointerDownHandler {
        //鼠标按下
        public void OnPointerDown(PointerEventData eventData)
        {
            //只有设置了下面的事件才会响应
           EventSystem.current.SetSelectedGameObject(this.gameObject);
        }
        //选中这个物体(既是鼠标焦点在这个物体上)
        public void OnSelect(BaseEventData eventData)
        {
            Debug.Log("选中");
        }
        public void OnUpdateSelected(BaseEventData eventData)
        {
            Debug.Log("Update选中");
        }
        //在inputManagerd对用Submit
        public void OnSubmit(BaseEventData eventData)
        {
            Debug.Log("提交");
        }
        //在inputManagerd对用Cancel
        public void OnCancel(BaseEventData eventData)
        {
            Debug.Log("取消");
        }
        //在inputManagerd对用Horizontal和Vertical
        public void OnMove(AxisEventData eventData)
        {
            Debug.Log("移动"+eventData.moveDir);
        } 
  

    //拖动接收事件
    public void OnDrop(PointerEventData eventData)
    {
        Debug.Log("接收的物体名字:——"+eventData.pointerEnter.gameObject.name);
    }
    //拖动事件
    public void OnDrag(PointerEventData eventData)
    {
        Debug.Log("拖动中");
    }

outro

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class EventTriggerListener :EventTrigger
{
    public delegate void VoidDelegate<T>(T eventData);
    public VoidDelegate<PointerEventData> onClick;
    public VoidDelegate<PointerEventData> onDown;
    public VoidDelegate<PointerEventData> onEnter;
    public VoidDelegate<PointerEventData> onExit;
    public VoidDelegate<PointerEventData> onUp;
    public VoidDelegate<BaseEventData> onSelect;
    public VoidDelegate<BaseEventData> onUpdateSelect;
    public VoidDelegate<AxisEventData> onMove;

    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(eventData);
    }
    public override void OnPointerDown(PointerEventData eventData)
    {
        if (onDown != null) onDown(eventData);
    }
    public override void OnPointerEnter(PointerEventData eventData)
    {
        if (onEnter != null) onEnter(eventData);
    }
    public override void OnPointerExit(PointerEventData eventData)
    {
        if (onExit != null) onExit(eventData);
    }
    public override void OnPointerUp(PointerEventData eventData)
    {
        if (onUp != null) onUp(eventData);
    }
    public override void OnSelect(BaseEventData eventData)
    {
        if (onSelect != null) onSelect(eventData);
    }
    public override void OnUpdateSelected(BaseEventData eventData)
    {
        if (onUpdateSelect != null) onUpdateSelect(eventData);
    }
    public override void OnMove(AxisEventData eventData)
    {
        if (onMove != null) onMove(eventData);
    } 
  
}

//-------------------------2019.4.19 Modificação e adição --------------

Alterar EventTriggerListener

using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
public class EventTriggerListener : EventTrigger
{
    public EventTriggerConstom<PointerEventData> OnMouseClick = new EventTriggerConstom<PointerEventData>();
    public EventTriggerConstom<PointerEventData> OnMouseDown=new EventTriggerConstom<PointerEventData>();
    public EventTriggerConstom<PointerEventData> OnMouseEnter=new EventTriggerConstom<PointerEventData>();
    public EventTriggerConstom<PointerEventData> OnMouseExit=new EventTriggerConstom<PointerEventData>();
    public EventTriggerConstom<PointerEventData> OnMouseUp=new EventTriggerConstom<PointerEventData>();
    public EventTriggerConstom<BaseEventData> OnMouseSelect=new EventTriggerConstom<BaseEventData>();
    public EventTriggerConstom<BaseEventData> OnMouseUpdateSelect=new EventTriggerConstom<BaseEventData>();
    public EventTriggerConstom<AxisEventData> OnMouseMove=new EventTriggerConstom<AxisEventData>();

    public static EventTriggerListener Get(GameObject go)
    {
        EventTriggerListener listener = go.GetComponent<EventTriggerListener>() ?? go.AddComponent<EventTriggerListener>();
        return listener;
    }
    public override void OnPointerClick(PointerEventData eventData)
    {

        if (OnMouseClick != null) OnMouseClick.Invoke(eventData);
    }
    public override void OnPointerDown(PointerEventData eventData)
    {
        if (OnMouseDown != null) OnMouseDown.Invoke(eventData);
    }
    public override void OnPointerEnter(PointerEventData eventData)
    {
        if (OnMouseEnter != null) OnMouseEnter.Invoke(eventData);
    }
    public override void OnPointerExit(PointerEventData eventData)
    {
        if (OnMouseExit != null) OnMouseExit.Invoke(eventData);
    }
    public override void OnPointerUp(PointerEventData eventData)
    {
        if (OnMouseUp != null) OnMouseUp.Invoke(eventData);
    }
    public override void OnSelect(BaseEventData eventData)
    {
        if (OnMouseSelect != null) OnMouseSelect.Invoke(eventData);
    }
    public override void OnUpdateSelected(BaseEventData eventData)
    {
        if (OnMouseUpdateSelect != null) OnMouseUpdateSelect.Invoke(eventData);
    }
    public override void OnMove(AxisEventData eventData)
    {
        if (OnMouseMove != null) OnMouseMove.Invoke(eventData);
    }

    //-------------
    public class EventTriggerConstom<T> : UnityEvent<T>
    { }
}

 

Acho que você gosta

Origin blog.csdn.net/K20132014/article/details/53495093
Recomendado
Clasificación