手動添加EventTrigger的事件固然方便,但是不利于以后的修改,所以用代碼添加是很有必要的。
起初使用的時候是參考了各家博主的代碼,都大致相似,就直接拿來。但是當我要在一個EventTrigger下添加多個事件的時候,代碼就冗余了,干脆封成一個方法,用起來方便,主要是不用費心思給那些臨時變量起名字了。
代碼如下:
/// <summary>
/// 添加EventTrigger的監聽事件
/// </summary>
/// <param name="obj">添加監聽的對象</param>
/// <param name="eventID">添加的監聽類型</param>
/// <param name="action">觸發方法</param>
private void AddTriggersListener(GameObject obj, EventTriggerType eventID, UnityAction<BaseEventData> action)
{
EventTrigger trigger = obj.GetComponent<EventTrigger>();
if (trigger == null)
{
trigger = obj.AddComponent<EventTrigger>();
}
if (trigger.triggers.Count == 0)
{
trigger.triggers = new List<EventTrigger.Entry>();
}
UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(action);
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = eventID;
entry.callback.AddListener(callback);
trigger.triggers.Add(entry);
}
使用示例:
//播放進度條EventTrigger監聽
AddTriggersListener(sliderProgressBar.gameObject, EventTriggerType.PointerEnter, OnVideoPointerEnter);
AddTriggersListener(sliderProgressBar.gameObject, EventTriggerType.PointerExit, OnVideoPointerExit);
AddTriggersListener(sliderProgressBar.gameObject, EventTriggerType.PointerClick, OnVideoPointerClick);
AddTriggersListener(sliderProgressBar.gameObject, EventTriggerType.BeginDrag, OnVideoBeginDrag);
AddTriggersListener(sliderProgressBar.gameObject, EventTriggerType.EndDrag, OnVideoEndDrag);