Hay una forma súper simple de cambiar eventos:
EDITAR
Vea mi otra respuesta para la forma rápida y fácil de agregar un evento solo para el OnClick
evento. Para otros eventos, como OnDrag
ver a continuación.
Además, si necesita algo más que los eventos proporcionados de forma predeterminada, sugeriría adjuntar un EventTrigger
objeto a su juego. Esto nos da acceso al BaseEventData
objeto devuelto por el evento y nos dice cosas como el objeto que creó el evento. Entonces puedes hacer algo como:
//Create an event delegate that will be used for creating methods that respond to events
public delegate void EventDelegate(UnityEngine.EventSystems.BaseEventData baseEvent);
Entonces podemos crear un método para manejar eventos, la firma debe coincidir con la de nuestro delegado. Por lo tanto, debe regresar void
y aceptar BaseEventData
como su primer y único parámetro:
public void DropEventMethod(UnityEngine.EventSystems.BaseEventData baseEvent) {
Debug.Log(baseEvent.selectedObject.name + " triggered an event!");
//baseEvent.selectedObject is the GameObject that triggered the event,
// so we can access its components, destroy it, or do whatever.
}
Finalmente, para agregar dinámicamente el evento:
//Get the event trigger attached to the UI object
EventTrigger eventTrigger = buttonObject.GetComponent<EventTrigger>();
//Create a new entry. This entry will describe the kind of event we're looking for
// and how to respond to it
EventTrigger.Entry entry = new EventTrigger.Entry();
//This event will respond to a drop event
entry.eventID = EventTriggerType.Drop;
//Create a new trigger to hold our callback methods
entry.callback = new EventTrigger.TriggerEvent();
//Create a new UnityAction, it contains our DropEventMethod delegate to respond to events
UnityEngine.Events.UnityAction<BaseEventData> callback =
new UnityEngine.Events.UnityAction<BaseEventData>(DropEventMethod);
//Add our callback to the listeners
entry.callback.AddListener(callback);
//Add the EventTrigger entry to the event trigger component
eventTrigger.delegates.Add(entry);
Si está utilizando la versión 5.3.3 o superior, use esta línea en lugar de la última línea anterior, delegados se deprecia :
eventTrigger.triggers.Add(entry);