Wie man Timeline-Signale verwendet

Seit der Einführung von Timeline im Jahr 2017 wissen wir, dass Sie geduldig auf eine Möglichkeit zum Senden von Ereignissen gewartet haben. Nun, warten Sie nicht länger! Ab Unity 2019.1 gibt es eine neue Funktion namens "Signale", mit der Sie Ereignisse senden können. Schauen wir uns an, was es mit dieser neuen Funktion auf sich hat.
So sehen die Signale im Zeitleistenfenster aus:

Wir haben Signals entwickelt, um einen Kommunikationskanal zwischen Timeline und externen Systemen einzurichten. Aber was bedeutet das? Warum haben wir uns für diesen Ansatz entschieden?
Nehmen wir an, Sie verwenden die Timeline, um eine Cutscene zu erstellen. Wenn die Cutscene endet, soll eine neue Szene geladen werden, und Sie wollen ein Physiksystem aktivieren. Es gibt mehrere Möglichkeiten, dieses Szenario umzusetzen:
Wenn Ihre Cutscene endet, verwenden Sie benutzerdefinierte Skripte, damit Ihre Timeline-Instanz direkt mit einem Szenenmanager und Ihrem Physiksystem interagiert.
Wenn Ihre Cutscene endet, erstellen Sie Marker und Signale, um ein "Cutscene finished"-Signal zu senden und interessierte Systeme auf das Signal reagieren zu lassen.
Das Timeline-Team entschied sich für den zweiten Ansatz, weil er den Sender unabhängig vom Empfänger macht. Durch ihre Unabhängigkeit wird die Flexibilität, Leistungsfähigkeit und Wiederverwendbarkeit erheblich gesteigert. Um dies besser zu verstehen, sollten wir uns ansehen, wie die verschiedenen Teile zusammenwirken.
Um über Signale mit externen Systemen zu kommunizieren, benötigen Sie drei Teile: eine Signalanlage, einen Signalsender und einen Signalempfänger.

- Signalgeber: Ein Signalemitter enthält einen Verweis auf ein Signal-Asset. In der Zeitleiste wird ein Signalgeber visuell durch einen Marker dargestellt. Sie können einen Marker auf einer Spur oder im Bereich "Marker" unter dem Zeitachsenlineal platzieren.

- Signalempfänger: Ein Signalempfänger ist eine Komponente mit einer Liste von Reaktionen. Jede Reaktion ist mit einer Signalanlage verknüpft.
- Signal Asset: Ein Signal-Asset ist die Verbindung zwischen einem Signal-Sender und einem Signal-Empfänger. Sie können dasselbe Signal Asset in vielen Timeline-Instanzen wiederverwenden.
Hier ist ein einfaches Spiel, bei dem du einen Hasen-Zombie besiegst, indem du die Pfeiltasten drückst, die zu den auf dem Bildschirm angezeigten Richtungsbildern passen:
Das Richtungsbild ändert sich zufällig mit jedem Musikschlag. Wenn Sie die rechte Pfeiltaste nicht drücken, bevor sich das Bild ändert, haben Sie verloren. Wenn Sie eine bestimmte Anzahl von Pfeiltasten drücken, haben Sie gewonnen.
Im Spiel umfasst die GameTimeline-Instanz das Spielgeschehen. Es verwendet Signale, um neue Richtungsbilder mit jedem musikalischen Schlag anzuzeigen, wie in der fertigen GameTimeline-Instanz unten gezeigt:

Um zu demonstrieren, wie man Signale erstellt und einrichtet, beginnen wir mit einem Projekt, in dem noch keine Signale erstellt wurden. Wenn Sie mitmachen wollen, können Sie das Projekt hier herunterladen.
Klicken Sie zunächst auf das Markersymbol neben den Clip-Bearbeitungsmodi, um den Markerbereich anzuzeigen, in dem Sie Signale hinzufügen. Der Bereich Markierungen wird unter dem Zeitachsenlineal angezeigt:

Um einen Signalemitter hinzuzufügen, klicken Sie mit der rechten Maustaste in den Markerbereich und wählen Sie Signalemitter hinzufügen.

Ein Signalgeber erscheint im Bereich Markierungen:

Der soeben hinzugefügte Signalemitter ist ausgewählt, und im Inspektorfenster werden seine Eigenschaften angezeigt. Das Inspektorfenster bietet auch Schaltflächen für die Erstellung der anderen Teile eines Signals:

Um den Signalgeber mit einem Signalempfänger zu verknüpfen, müssen Sie ein neues Signal-Asset hinzufügen. Klicken Sie im Inspektorfenster auf Signal erstellen.... Benennen Sie das Signal-Asset "ShowKey", denn dieses Signal-Asset wird verwendet, um einen Sender mit einem Empfänger zu verbinden, um das Richtungsbild zu ändern. Klicken Sie auf Speichern und das Signal-Asset wird dem Projekt hinzugefügt.
Sie möchten auch, dass der Signalsender mit einem Signalempfänger verknüpft wird, also klicken Sie auf Signalempfänger hinzufügen. Ihr Inspektor-Fenster sollte nun wie folgt aussehen:

Bevor wir fortfahren, sollten wir innehalten und beschreiben, was hier vor sich geht. Wenn Sie auf die Schaltfläche Signalempfänger hinzufügen klicken, geschehen zwei Dinge: Eine neue Signalempfängerkomponente wird dem gebundenen Spielobjekt hinzugefügt und eine neue Reaktion wird hinzugefügt und mit dem gerade erstellten Signal-Asset verknüpft. Sie können sehen, dass sie miteinander verknüpft sind, weil "ShowKey" als Emit-Signal erscheint und "ShowKey" zur Liste der Reaktionen hinzugefügt wird:

Das Inspektorfenster zeigt zwei Dinge: die Eigenschaften des Signalgebers und die von der Komponente Signalempfänger definierten Reaktionen:

Obwohl die Komponente Signalempfänger mit dem GameObject verknüpft ist, das mit der Timeline-Instanz verbunden ist, können Sie den Signalempfänger im Inspektorfenster bearbeiten. Die Reaktion wird ausgelöst, wenn der Signalempfänger das Signal empfängt.
Im letzten Schritt wird festgelegt, was die Reaktion bewirkt. In diesem Beispiel gibt es eine Komponente namens Manager mit einer ShowRandomKey-Methode . Diese Methode zeigt eine neue zufällige Pfeiltaste an. Damit die Reaktion die Methode ShowRandomKey aufruft, wählen Sie diese Methode für das Unity-Ereignis aus, wie unten gezeigt:

Und das war's! Nach dem Hinzufügen des Signalsenders und der Definition des Signalempfängers und der Reaktion haben Sie nun ein Beispiel für eine Zeitleisteninstanz, die mit der Szene kommuniziert.
Wenn die Timeline auf den Signalemitter trifft, wird das Signal ShowKey ausgegeben. Der Signalempfänger, der auf das Signal ShowKey wartet, ruft die Methode ShowRandomKey auf.
Aber das ist noch lange nicht alles. Mehrere Signalgeber können das gleiche Signal aussenden. In der folgenden Timeline-Instanz wurde beispielsweise derselbe Signalemitter kopiert und zu verschiedenen Zeiten verschoben; es gibt einen Emitter für jeden musikalischen Takt:
Sie können ein Signal-Asset auch direkt aus dem Projektfenster in das Zeitleistenfenster ziehen. Ein Signalemitter wird automatisch erstellt, wobei die Eigenschaft Signal senden bereits eingestellt ist.
Um zu sehen, wie das fertige Projekt mit allen Signalen aussieht, können Sie es hier herunterladen.
Um Ihr erstes Signal einzurichten, müssen Sie Folgendes tun:
Klicken Sie mit der rechten Maustaste auf einen Markerbereich oder eine Spur, die Signale unterstützt, und wählen Sie dann Signalemitter hinzufügen...
Klicken Sie im Inspektorfenster auf Signal-Asset erstellen, wählen Sie einen Dateinamen und drücken Sie die Eingabetaste.
Klicken Sie im Inspektor auf die Schaltfläche Reaktion erstellen... und definieren Sie die Reaktion, die mit dem gerade erstellten Signal verbunden ist.
- Kann ich mehrere Empfänger auf einem einzigen Spielobjekt haben? Ja, alle Signalempfänger eines GameObjects empfangen die Signale, die an dieses GameObject gesendet werden.
- Kann ein Signal-Asset zwischen mehreren Timeline-Instanzen wiederverwendet werden? Ja, ein Signal Asset kann in mehr als einer Timeline-Instanz verwendet werden.
- Kann ein Signal Asset erweitert und angepasst werden? Ja, Signal Asset, Signal Emitter und Signal Receiver können alle erweitert werden. Aber das ist ein Thema für einen anderen Tag; es wird einen weiteren Blogbeitrag zum Thema Anpassung geben.
- Wird das Aussenden von Signalen garantiert? Ja. Signale werden nicht übersprungen; sie werden unabhängig von den FPS des Spiels im nächsten Frame ausgegeben.
- Was passiert, wenn das Duplizieren eines Timeline-Assets Signalgeber enthält? Die Signalgeber behalten ihren Bezug zu ihren Signal Assets. Signal Assets werden nicht dupliziert.
---
Sehen Sie sich die Lerninhalte für Anfänger und Fortgeschrittene zur Verwendung von Timeline auf der Unity Learn Premium-Plattform an.