Warte, ich habe es mir anders überlegt" - Unterbrechungen von Zustandsmaschinenübergängen

Lassen Sie uns also in die komplizierten Details von State Machine Transitions und Unterbrechungen eintauchen!
Standardmäßig können Übergänge im Animationssystem nicht unterbrochen werden: Sobald Sie von einem Zustand in den anderen wechseln, gibt es keinen Ausweg mehr. Wie ein Passagier auf einem Transatlantikflug sitzt man gemütlich in seinem Sitz, bis man sein Ziel erreicht hat und es sich nicht mehr anders überlegen kann. Für die meisten Benutzer ist das in Ordnung.
Wenn Sie jedoch mehr Kontrolle über die Übergänge benötigen, kann Mecanim auf verschiedene Weise konfiguriert werden, um Ihren Anforderungen gerecht zu werden. Wenn Sie mit Ihrem aktuellen Zielort unzufrieden sind, können Sie auf dem Pilotensitz Platz nehmen und Ihre Pläne während des Fluges ändern. Das bedeutet reaktionsschnellere Animationen, aber auch viele Möglichkeiten, sich in der Komplexität zu verlieren.
Gehen wir also ein paar Beispiele durch, um das zu klären. Wir können mit einem recht einfachen Zustandsautomaten mit vier Zuständen beginnen, die mit A bis D gekennzeichnet sind, und mit Auslösern, die an jeden Übergang des Zustandsautomaten gekoppelt sind.

Wenn wir den Übergang A->B auslösen, geht unser Zustandsautomat standardmäßig nach B über, und nichts kann ihn daran hindern, sein Ziel zu erreichen. Wenn wir jedoch den Inspektor für den Übergang A->B aufrufen und die Unterbrechungsquelle von "Keine" auf "Aktueller Zustand" ändern, kann unsere Reise von A nach B durch einige Auslöser im Zustand A unterbrochen werden.

Warum nur "einige"? Denn das Kontrollkästchen "Geordnete Unterbrechung" ist ebenfalls standardmäßig aktiviert. Das bedeutet, dass nur Übergänge im Zustand A erlaubt sind, die eine höhere Priorität haben als der aktuelle. Betrachtet man den Inspektor des Zustands A, so stellt man fest, dass dies nur für den Übergang A->C gilt.

Wenn wir also den Auslöser A->B aktivieren und kurz darauf den Auslöser A->D, bleibt unser Übergang ununterbrochen. Wenn wir jedoch stattdessen den Auslöser A->C drücken, wird der Übergang sofort unterbrochen und der Zustandsautomat beginnt mit dem Übergang zu C.
Intern zeichnet das Animationssystem die Pose zum Zeitpunkt der Unterbrechung auf und wird nun zwischen dieser statischen Pose (X) und der neuen Zielanimation überblenden. Warum eine statische Pose, statt einer möglicherweise sanfteren Überblendung zwischen den aktuellen und neuen Übergängen? Einfach gesagt: Leistung. Wenn ein Spiel mit einer Kaskade von Unterbrechungen konfrontiert ist, würde das Verfolgen von mehreren gleichzeitig stattfindenden dynamischen Übergängen das Animationssystem schnell unskalierbar machen.
Wenn wir nun das Kontrollkästchen "Geordnete Unterbrechung" deaktivieren, dann können sowohl A->C als auch A->D den Übergang unterbrechen. Wenn sie jedoch beide im selben Frame ausgelöst werden, hat A->C Vorrang, da es eine höhere Priorität hat.
Wenn wir die Unterbrechungsquelle auf "Next State" ändern, können A->C und A->D den Übergang nicht mehr unterbrechen, unabhängig von ihrer Reihenfolge. Wenn wir jedoch den Auslöser B->D drücken, beginnen wir sofort mit dem Übergang von A nach D, ohne den Übergang nach B abzuschließen.
Auch im Zustand B ist die Reihenfolge der Übergänge wichtig. Das Kontrollkästchen "Geordnete Unterbrechung" ist nicht mehr verfügbar (jeder ausgelöste Übergang auf B kann den Übergang unterbrechen, da sie keine Prioritätsrangfolge in Bezug auf A->B haben), aber die Reihenfolge der Übergänge auf B bestimmt, welcher Übergang gewinnt, wenn beide innerhalb desselben Rahmens ausgelöst werden. Wenn in diesem Fall B->D und B->C im selben Frame ausgelöst werden, wird B->D ausgewählt.

Schließlich können wir zur vollständigen Kontrolle die Unterbrechungsquelle auf "Aktueller Zustand dann nächster Zustand" oder "Nächster Zustand dann aktueller Zustand" einstellen. In diesem Fall werden die Übergänge unabhängig voneinander erst für den einen und dann für den anderen Zustand analysiert.
Nehmen wir also an, wir haben die folgende Konfiguration.

Während des Übergangs A->B löst ein sehr aufgeregter Spieler vier Übergänge innerhalb desselben Rahmens aus: A->C, A->D, B->C und B->D. Was geschieht?
Erstens ist "Geordnete Unterbrechung" angekreuzt, so dass wir A->D sofort ignorieren können: es hat eine niedrigere Priorität als A->B. Der aktuelle Zustand wird zuerst aufgelöst, so dass wir uns nicht einmal den Zustand B ansehen müssen, um zu wissen, dass der Übergang A->C gewinnt.

