[Unity] EventTrigger Listener

WestCoast·2023년 1월 7일
0

Unity

목록 보기
4/5

유니티 이벤트트리거 리스너가 없어서 개열받지만 구글링 해서 이쁘게 정리함.

유니티 포럼에서 관련된 스레드에 괜찮은 형태로 만들어둔게 있었음.

추가로 extenstion method 도 최근에 알게된 기능이라 한 번 써봤다. 이 경우에 쓰기에 딱 좋은 기능인듯?

레퍼: https://answers.unity.com/questions/854251/how-do-you-add-an-ui-eventtrigger-by-script.html


사용하려면 아래처럼

private void Start()
{
    EventTrigger eventTrigger = GetComponent<EventTrigger>();
    eventTrigger.AddListener(EventTriggerType.PointerClick, OnClick);
}

private void OnClick(BaseEventData arg0)
{
    // 클릭되었을 때 할 것들 여기에 작성
    // 이 경우에는 클릭이니까 아래처럼 형변환해서 사용함
    PointerEventData pointerData = (PointerEventData)arg0;
}

대충 UTIL 클래스 같은 거에 넣으면 되는 코드

public static void AddListener(this EventTrigger trigger, EventTriggerType triggerType, UnityAction<BaseEventData> callback)
{
    if(trigger == null)
    {
        Debug.LogError("EventTrigger is NULL.");
        return;
    }

    EventTrigger.Entry entry = new();
    entry.eventID = triggerType;
    entry.callback.AddListener(callback);

    trigger.triggers.Add(entry);
}

public static void RemoveListener(this EventTrigger trigger, EventTriggerType triggerType, UnityAction<BaseEventData> callback)
{
    if(trigger == null)
    {
        Debug.LogError("EventTrigger is NULL.");
        return;
    }

    EventTrigger.Entry entry = trigger.triggers.Find(e => e.eventID == triggerType);
    entry?.callback.RemoveListener(callback);
}

public static void RemoveAllListeners(this EventTrigger trigger, EventTriggerType triggerType)
{
    if(trigger == null)
    {
        Debug.LogError("EventTrigger is NULL.");
        return;
    }

    EventTrigger.Entry entry = trigger.triggers.Find(e => e.eventID == triggerType);
    entry?.callback.RemoveAllListeners();
}
profile
게임... 만들지 않겠는가..

0개의 댓글