Есть супер простой способ изменить события:
РЕДАКТИРОВАТЬ
Смотрите мой другой ответ для быстрого и простого способа добавить событие только для OnClick
события. Для других событий, как OnDrag
см. Ниже.
Кроме того, если вам нужно больше, чем просто события, предоставляемые по умолчанию, я бы предложил вместо этого присоединить объект EventTrigger
к вашему игровому объекту. Это дает нам доступ к BaseEventData
объекту, возвращенному из события, сообщая нам такие вещи, как объект, который создал событие. Тогда вы можете сделать что-то вроде:
//Create an event delegate that will be used for creating methods that respond to events
public delegate void EventDelegate(UnityEngine.EventSystems.BaseEventData baseEvent);
Затем мы можем создать метод для обработки событий, подпись должна соответствовать подписи нашего делегата. Таким образом, он должен вернуть void
и принять в BaseEventData
качестве своего первого и единственного параметра:
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.
}
Наконец, чтобы динамически добавить событие:
//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);
Если вы используете версию 5.3.3 или выше, используйте эту строку вместо последней строки выше, делегаты не рекомендуются :
eventTrigger.triggers.Add(entry);