Unity(十)EventTriggerコンポーネントを使用してクリックなどのイベントを傍受する

2145 ワード

PS:通常、ImageまたはButtonにEventTriggerコンポーネントを直接追加して、押下、アクセスなどのイベントの発生を傍受することができます.しかし、手動で追加するのは自然に限界があります.Buttonは、Inspectorパネルに対応するClick関数を手動で付与するほか、EventTiggerコンポーネントを追加することもできます.Awake/startメソッドで簡単にbtnを使用することもできます.OnClick.AddListener(関数)は、クリックイベントをリスニングします.ここまで言うと、ImageはButtonではないので、このように簡単にこのAPIを使うことはできません.
 
ここでは、UI上の様々なクリックオブジェクトやイベントを容易に管理するために、以下のようにします.
public class UIManager : MonoBehaviour {

   public Image img;
    public Button btn1;
    public ScrollRect rect;
   //...

    void Awake()
    {
        AddTriggersListener(img.gameObject,EventTriggerType.PointerClick,MyFunction01);
        AddTriggersListener(btn1.gameObject, EventTriggerType.PointerClick, MyFunction02);
        AddTriggersListener(rect.gameObject, EventTriggerType.Drag,MyFunction03);
        //...
    }

    void MyFunction01(BaseEventData data)
    {
        Debug.Log("click event1");
    }
    void MyFunction02(BaseEventData data)
    {
        Debug.Log("click event2");
    }
    void MyFunction03(BaseEventData data)
    {
        Debug.Log("click event3");
    }


    private void AddTriggersListener(GameObject obj, EventTriggerType eventID, UnityAction action)
    {
        EventTrigger trigger = obj.GetComponent();
        if (trigger == null)
        {
            trigger = obj.AddComponent();
        }

        if (trigger.triggers.Count == 0)
        {
            trigger.triggers = new List();
        }

        UnityAction callback = new UnityAction(action);
        EventTrigger.Entry entry = new EventTrigger.Entry();
        entry.eventID = eventID;
        entry.callback.AddListener(callback);
        trigger.triggers.Add(entry);
    }
 

その原理は,オブジェクトにこのコンポーネントを追加し,Listenerイベントを登録することである.
ここからEventTriggerにはdragドラッグイベントなど、呼び出しが便利な公式のトリガAPIもたくさん見られます.
これにより,UI上のオブジェクトクリックイベントなどを容易に管理することができ,O.はUIだけではない.
 
原作者コードリンク:https://www.jianshu.com/p/6831552bbf8b