Existe uma maneira super simples de alterar eventos:
EDITAR
Veja minha outra resposta para a maneira rápida e fácil de adicionar um evento apenas para o OnClick
evento. Para outros eventos, como OnDrag
veja abaixo.
Além disso, se você precisar de mais do que apenas os eventos fornecidos por padrão, sugiro anexar um EventTrigger
ao seu objeto de jogo. Isso nos dá acesso ao BaseEventData
objeto retornado do evento, informando coisas como o objeto que criou o evento. Então você pode fazer 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);
Em seguida, podemos criar um método para manipular eventos, a assinatura deve corresponder à do nosso delegado. Portanto, ele precisa retornar void
e aceitar BaseEventData
como seu primeiro e ú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.
}
Por fim, para adicionar dinamicamente o 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 você estiver usando a versão 5.3.3 ou superior, use esta linha em vez da última linha acima, delegados será depreciado :
eventTrigger.triggers.Add(entry);