C'è un modo super semplice per cambiare gli eventi:
MODIFICARE
Vedi la mia altra risposta per il modo semplice e veloce di aggiungere un evento solo per l' OnClick
evento. Per altri eventi, come OnDrag
vedi sotto.
Inoltre, se hai bisogno di qualcosa di più degli eventi forniti per impostazione predefinita, suggerirei invece di allegare un EventTrigger
oggetto di gioco. Questo ci dà accesso BaseEventData
all'oggetto restituito dall'evento, raccontandoci cose come l'oggetto che ha creato l'evento. Quindi puoi fare qualcosa del tipo:
//Create an event delegate that will be used for creating methods that respond to events
public delegate void EventDelegate(UnityEngine.EventSystems.BaseEventData baseEvent);
Quindi possiamo creare un metodo per gestire gli eventi, la firma deve corrispondere a quella del nostro delegato. Quindi, deve restituire void
e accettare BaseEventData
come primo e unico parametro:
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.
}
Infine, per aggiungere dinamicamente l'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);
Se si utilizza la versione 5.3.3 o successiva, utilizzare questa riga anziché l'ultima riga precedente, i delegati sono ammortizzati :
eventTrigger.triggers.Add(entry);