Є надзвичайно простий спосіб змінити події:
EDIT
Дивіться іншу відповідь про швидкий і простий спосіб додати подію лише до 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);