Es gibt eine sehr einfache Möglichkeit, Ereignisse zu ändern:
BEARBEITEN
In meiner anderen Antwort finden Sie die schnelle und einfache Möglichkeit, ein Ereignis nur für das OnClick
Ereignis hinzuzufügen . Für andere Veranstaltungen OnDrag
siehe unten.
Wenn Sie mehr als nur die standardmäßig bereitgestellten Ereignisse benötigen, würde ich empfehlen, stattdessen ein EventTrigger
an Ihr Spielobjekt anzuhängen. Dies gibt uns Zugriff auf das BaseEventData
Objekt, das vom Ereignis zurückgegeben wurde, und teilt uns Dinge wie das Objekt mit, das das Ereignis erstellt hat. Dann können Sie etwas tun wie:
//Create an event delegate that will be used for creating methods that respond to events
public delegate void EventDelegate(UnityEngine.EventSystems.BaseEventData baseEvent);
Dann können wir eine Methode zur Behandlung von Ereignissen erstellen. Die Signatur muss mit der unseres Delegierten übereinstimmen. Daher muss es als ersten und einzigen Parameter zurückgeben void
und akzeptieren 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.
}
Zum Schluss, um das Ereignis dynamisch hinzuzufügen:
//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);
Wenn Sie Version 5.3.3 oder höher verwenden, verwenden Sie diese Zeile anstelle der letzten Zeile oben. Delegaten werden abgeschrieben :
eventTrigger.triggers.Add(entry);