Skip to content

Instantly share code, notes, and snippets.

@glebov21
Created February 2, 2018 08:38
Show Gist options
  • Save glebov21/343266bdccdaafe40b8cbf8aec5a3c9d to your computer and use it in GitHub Desktop.
Save glebov21/343266bdccdaafe40b8cbf8aec5a3c9d to your computer and use it in GitHub Desktop.
Unity3d EventsExtension
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using System.Linq;
using UnityEngine.UI;
public static class EventsExtension
{
/// <summary>
///
/// </summary>
/// <typeparam name="T">PointerEventData</typeparam>
/// <param name="gameObject"></param>
/// <param name="eventType"></param>
/// <param name="action"></param>
public static void SetEvent<T>(this GameObject gameObject, EventTriggerType eventType, Action<T> action) where T : BaseEventData
{
var trigger = gameObject.GetOrSetAndGetEventTrigger();
trigger.SetEvent(eventType, action);
}
public static void RemoveEvents(this GameObject gameObject, EventTriggerType eventType)
{
var trigger = gameObject.GetOrSetAndGetEventTrigger();
trigger.RemoveEvent(eventType);
}
private static EventTrigger GetOrSetAndGetEventTrigger(this GameObject go)
{
var component = go.GetComponent<EventTrigger>();
if (component == null)
{
component = go.AddComponent<EventTrigger>();
}
return component;
}
public static void SetEvent<T>(this EventTrigger trigger, EventTriggerType eventType, Action<T> action) where T : BaseEventData
{
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = eventType;
entry.callback.SetListener((eventData) => action((T)eventData));
trigger.triggers.RemoveAll(x => x.eventID == eventType);
trigger.triggers.Add(entry);
}
public static void RemoveEvent(this EventTrigger trigger, EventTriggerType eventType)
{
trigger.triggers.RemoveAll(x => x.eventID == eventType);
}
public static void SetListener(this UnityEvent Event, UnityAction action)
{
Event.RemoveAllListeners();
Event.AddListener(action);
}
public static void SetListener<T0>(this UnityEvent<T0> Event, UnityAction<T0> action)
{
Event.RemoveAllListeners();
Event.AddListener(action);
}
public static void SetListener<T0, T1>(this UnityEvent<T0, T1> Event, UnityAction<T0, T1> action)
{
Event.RemoveAllListeners();
Event.AddListener(action);
}
public static void SetListener<T0, T1, T2>(this UnityEvent<T0, T1, T2> Event, UnityAction<T0, T1, T2> action)
{
Event.RemoveAllListeners();
Event.AddListener(action);
}
public static void SetListener<T0, T1, T2, T3>(this UnityEvent<T0, T1, T2, T3> Event, UnityAction<T0, T1, T2, T3> action)
{
Event.RemoveAllListeners();
Event.AddListener(action);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment