
Erstellen Sie Animator-Controller für Ihre Charaktere, wie Sie es mit einem Skript tun würden – damit sie einfach genug sind, um sie während des Entwicklungszyklus wiederzuverwenden, zu unterstützen und zu debuggen.
Alle Screenshots unten stammen aus der Animation für den Charakter Henry in Firewatch von Campo Santo.

Blend Trees sind großartig, um Komplexität zu verbergen. Ein Blend Tree hat keinen Zustand, da er nicht in den Code zurückruft. Es mischt zwischen den verschiedenen Clips basierend auf den von Ihnen definierten Parametern.
Die Bedeutung davon ist, dass Sie an Blend Trees iterieren können, ohne sich Sorgen machen zu müssen, den Rest Ihres Spiels zu brechen. Sie können ein komplexes Netz von Zuständen verbergen und Bugs in der Zukunft verhindern, da Sie das Verhalten nicht an die meisten Animationen in einem Blend Tree binden können.

Es hilft, Schichten als eine Klasse in einem Skript zu betrachten. Sie möchten, dass alles in einer Schicht sowohl die gleiche logische als auch die gleiche Verhaltensfunktion erfüllt. Dies liegt daran, dass jede einzelne Ebene steuert, welche anderen Ebenen sie überschreibt – ob sie bestimmte Knochen beeinflusst, ob diese Ebene additiv ist und so weiter.
Wiederverwendbare, logische Muster in Zustands- und Unterzustandsmaschinen beschleunigen die Entwicklung, erleichtern das Debugging und können Fehler reduzieren, während sie mehreren Personen ermöglichen, ähnliche Inhalte zu erstellen.
Die folgenden Abschnitte präsentieren Muster, die nützlich sind, um Ihre Ebenen zu strukturieren.

Dieses Muster erleichtert das Debuggen, da Sie die Übergänge klar sehen können, die in den leeren Zustand hinaus und zurück kommen. Jede Speiche des Hubs sollte jeden Zustand zurücksetzen, den sie berührt.
Speichen sind solide Kandidaten für die Erstellung von Unterzustandsmaschinen unter Verwendung der folgenden Muster.

Indem Sie Zustände in ein Muster von "Intro" – Ausführung/Schleife – "Outro" gruppieren, können Sie Animationsevents oder Zustandsmaschinenverhalten sauber an die Intro- und Outro-Zustände anhängen. Ähnlich wie bei einem Blend Tree können Sie die inneren Ausführungs-/Schleifen-Zustände iterieren und ändern, ohne sich Sorgen machen zu müssen, dass Ihr Spiel kaputtgeht.

Für unterbrechbare Animationen, insbesondere von Spielerinput gesteuerte Animationen, teilen Sie Ihren Clip in zwei Teile auf. Zuerst sollten Sie einen kritischen Abschnitt beibehalten, der alle Zustandsänderungen, Effekte und Schäden enthält, die immer bis zum Ende abgespielt werden müssen. Zweitens sollten Sie eine Settleanimation entwerfen, die gut aussieht, wenn sie Sie zurück in den Leerlauf bringt und die durch neue Eingaben unterbrochen werden kann.
Sobald sich Ihre Animationen wie gewünscht verhalten und erscheinen, müssen Sie den Zustand Ihrer Animator in den Zustand Ihres Spiels zurückspeisen. Siehe die folgenden Abschnitte für einige wichtige Punkte, die Sie beachten sollten.
Zustandsmaschinenverhalten sind Codefragmente, die Sie an jeden Animationszustand anhängen können. Verwenden Sie sie, um Verhaltensweisen direkt mit dem Zustand des Animators selbst zu verknüpfen.
Vermeiden Sie es, komplexen Gameplay-Code innerhalb von ihnen zu schreiben, da es schwierig werden kann, nachzuvollziehen, woher Ihre Änderungen im Zustand kommen. Wenn Sie das Zustandsmaschinenverhalten verwenden, um Gameplay-Code zu steuern, nutzen Sie ein Nachrichtensystem; sprechen Sie mit einer Managerklasse oder lösen Sie Ihren Code anhand von Parametern auf einer höheren Ebene aus.
Debug.Break() ist eines der effektivsten State Machine Behaviors, die Sie verwenden können. Fügen Sie es überall in Ihrem Animationssetup hinzu, und Sie haben einen Haltepunkt, der dem eines visuellen Skripting-Systems ähnelt.
Verwenden Sie C#-Code, wo es angebracht ist. Anstatt Hunderte oder Tausende von Übergängen zu verwalten oder AnyState-Übergänge überall zu verknüpfen, verwenden Sie Animator.Play oder Animator.CrossFade, um direkt aus dem Code dynamisch Übergänge zu erstellen. Wenn das immer noch nicht genug Kontrolle für Sie ist, schauen Sie sich Unitys Playables API für weitere Möglichkeiten an, Animationen mit Code zu erstellen. Einige Beispiele finden Sie hier.

Animationsereignisse verknüpfen einen bestimmten Moment Ihres Animationsclips mit einem bestimmten Zustandswechsel in Ihrem Spiel. Sie können verwendet werden, um Elemente wie visuelle und Soundeffekte auszulösen. Wenn Sie jedoch vor dem Auslösen eines Clips aus diesem übergehen, wird es niemals ausgelöst. Eine Möglichkeit, dies zu lösen, besteht darin, ein State Machine Behavior hinzuzufügen, das sicherstellt, dass das Ereignis immer ausgelöst wird, wenn ein bestimmter Zeitpunkt erreicht ist, egal was sonst im Spiel passiert (oder nicht passiert).