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);
Das Wort ist, dass die
delegate{}
in meiner vorherigen Antwort gefundene Syntax veraltet ist. Es gibt eine andere Möglichkeit, dies mit der Lambda-Notation zu tun:Oder Sie können den Button weitergeben, um die Dinge etwas dynamischer zu gestalten:
quelle
OnClick
Veranstaltung gilt. Um andere Ereignisse dynamisch hinzuzufügen, müssen Sie den Anweisungen in meiner anderen Antwort folgen.Erstellen Sie ein neues Skript wie folgt:
Dieses Skript implementiert in der Schnittstelle IPointerClickHandler (neben vielen anderen verfügbaren Schnittstellen ). Durch einfaches Anhängen dieses Skripts an ein UI-Element kann dieses Skript Klickereignisse abfangen (oder für welches Ereignis Sie die Schnittstelle implementieren).
Der nächste Schritt besteht darin, dieses Skript einfach dynamisch als Komponente zum gewünschten UI-Element hinzuzufügen:
Dadurch wird das Skript als Komponente hinzugefügt,
myButton
und wenn ich das nächste Mal auf die Schaltfläche klicke, erhalte ich Informationen darüber, auf welche Schaltfläche geklickt wurde und wo der Klick stattgefunden hat.Dies bietet die meisten Informationen über das Ereignis im Vergleich zu meinen anderen Antworten.
quelle
Die Implementierung der Benutzeroberfläche durch Unity erfolgt wie bei allen anderen Unity-Komponenten. Sie fügen GameObject hinzu und fügen UI-Komponenten hinzu. Sobald Sie das Spielobjekt haben, können Sie die UI-Komponenten daraus abrufen und die Eigenschaften ändern.
Die API-Referenz für die Benutzeroberfläche befindet sich im UnityEngine.UI-Namespace. Die API-Referenz für BUtton lautet http://docs.unity3d.com/ScriptReference/UI.Button.html
Weitere Informationen zum Zugriff auf die Benutzeroberfläche über C # -Skripte finden Sie im Beitrag http://blog.trsquarelab.com/2015/03/new-ui-implementation-using-c-scripts.html
quelle