Istnieje bardzo prosty sposób na zmianę wydarzeń:
EDYTOWAĆ
Zobacz moją drugą odpowiedź, aby szybko i łatwo dodać OnClick
wydarzenie tylko do wydarzenia. W przypadku innych wydarzeń, jak OnDrag
poniżej.
Dodatkowo, jeśli potrzebujesz czegoś więcej niż tylko domyślnie dostarczonych zdarzeń, sugeruję zamiast tego dołączyć EventTrigger
do twojego obiektu gry. To daje nam dostęp do BaseEventData
obiektu zwróconego ze zdarzenia, mówiąc nam rzeczy takie jak obiekt, który utworzył zdarzenie. Następnie możesz zrobić coś takiego:
//Create an event delegate that will be used for creating methods that respond to events
public delegate void EventDelegate(UnityEngine.EventSystems.BaseEventData baseEvent);
Następnie możemy stworzyć metodę obsługi zdarzeń, podpis musi być zgodny z podpisem naszego delegata. Musi więc zwrócić void
i zaakceptować BaseEventData
jako pierwszy i jedyny parametr:
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.
}
Na koniec, aby dynamicznie dodać wydarzenie:
//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);
Jeśli używasz wersji 5.3.3 lub nowszej, użyj tego wiersza zamiast ostatniego wiersza powyżej, delegaci są amortyzowani :
eventTrigger.triggers.Add(entry);