유니티 이벤트트리거 리스너가 없어서 개열받지만 구글링 해서 이쁘게 정리함.
유니티 포럼에서 관련된 스레드에 괜찮은 형태로 만들어둔게 있었음.
추가로 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;
}
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();
}