Erstellen Sie Animator-Controller für Ihre Figuren wie ein Skript - so dass sie einfach genug sind, um sie während des gesamten 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 hervorragend geeignet, um Komplexität zu verbergen. Ein Blend Tree hat keinen Zustand, da er nicht in den Code zurückruft. Die Überblendung zwischen den verschiedenen Clips erfolgt anhand der von Ihnen festgelegten Parameter.
Das bedeutet, dass man Blend Trees iterieren kann, ohne sich Sorgen zu machen, dass der Rest des Spiels kaputt geht. Sie können ein komplexes Geflecht von Zuständen verbergen und Fehler in der Zukunft vermeiden, da Sie das Verhalten nicht mit den meisten Animationen in einem Blend Tree verknüpfen können.
Es ist hilfreich, sich die Ebenen als eine Klasse in einem Skript vorzustellen. Sie möchten, dass alles in einer Ebene sowohl die gleiche logische Funktion als auch die gleiche Verhaltensfunktion erfüllt. Das liegt daran, dass jede einzelne Ebene steuert, welche anderen Ebenen sie außer Kraft setzt - ob sie sich auf bestimmte Bones auswirkt oder nicht, ob diese Ebene additiv ist usw.
Wiederverwendbare, logische Muster in Zustands- und Unterzustandsautomaten beschleunigen die Entwicklung, erleichtern die Fehlersuche und können Bugs reduzieren, während mehrere Personen ähnliche Inhalte erstellen können.
In den folgenden Abschnitten werden Muster vorgestellt, die für die Strukturierung Ihrer Ebenen nützlich sind.
Dieses Muster erleichtert die Fehlersuche, da man deutlich sehen kann, wie die Übergänge in den leeren Zustand übergehen und wieder zurückkommen. Jede Speiche der Nabe sollte jeden Zustand zurücksetzen, den sie berührt.
Speichen sind gute Kandidaten für die Herstellung von Substate-Maschinen nach den folgenden Mustern.
Durch die Gruppierung von Zuständen nach dem Muster "Intro" - Ausführung/Schleife - "Outro" können Sie beliebige Animationsereignisse oder Zustandsautomatenverhalten sauber mit den Intro- und Outro-Zuständen verbinden. Ähnlich wie bei einem Blend Tree können Sie iterieren und die inneren Ausführungs- bzw. Schleifenzustände ändern, ohne sich Sorgen machen zu müssen, dass Ihr Spiel unterbrochen wird.
Bei unterbrechbaren Animationen, insbesondere bei Animationen, die durch Spielereingaben gesteuert werden, sollten Sie Ihren Clip in zwei Teile aufteilen. Pflegen Sie zunächst einen kritischen Abschnitt, der alle Zustandsänderungen, Auswirkungen und Schäden enthält, die immer zu Ende gespielt werden müssen. Zweitens: Entwickeln Sie eine Absetzanimation, die gut aussieht, um wieder in den Leerlauf zu gelangen, und die durch neue Eingaben unterbrochen werden kann.
Sobald sich Ihre Animationen wie gewünscht verhalten und erscheinen, müssen Sie den Zustand Ihrer Animatoren in den Zustand Ihres Spiels zurückführen. In den folgenden Abschnitten finden Sie einige wichtige Punkte, die Sie beachten sollten.
State Machine Behaviours sind Codestücke, 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, darin komplexen Spielcode zu schreiben, da es schwierig werden kann, nachzuvollziehen, woher Ihre Änderungen im Zustand kommen. Wenn Sie State Machine Behaviour zur Steuerung von Gameplay-Code verwenden, nutzen Sie ein Messaging-System, sprechen Sie mit einer Manager-Klasse oder lösen Sie Ihren Code anhand von Parametern auf einer höheren Ebene aus.
Debug.Break() ist eine der effektivsten State Machine Behaviours, die Sie verwenden können. Hängen Sie ihn an einer beliebigen Stelle in Ihrem Animations-Setup ein und Sie erhalten einen Haltepunkt, der dem eines visuellen Skriptsystems ähnelt.
Verwenden Sie gegebenenfalls C#-Code. Anstatt Hunderte oder Tausende von Übergängen zu verwalten oder AnyState-Übergänge überall einzubinden, können Sie mit Animator.Play oder Animator.CrossFade direkte Übergänge dynamisch aus dem Code heraus erstellen. Wenn das immer noch nicht genug Kontrolle für Sie ist, schauen Sie sich die Playables API von Unity an, um weitere Möglichkeiten zur Animation mit Code zu erhalten. Einige Beispiele sind hier zu finden.
Animationsereignisse verbinden einen bestimmten Moment Ihres Animationsclips mit einer bestimmten Zustandsänderung in Ihrem Spiel. Sie können verwendet werden, um Elemente wie Bild- und Toneffekte hervorzuheben. Wenn Sie jedoch aus einem Magazin aussteigen, bevor es abgefeuert wurde, wird es nie abgefeuert. Eine Möglichkeit, dieses Problem zu lösen, besteht darin, ein State Machine Behaviour hinzuzufügen, das sicherstellt, dass das Ereignis immer dann ausgelöst wird, wenn ein bestimmter Zeitpunkt erreicht ist, unabhängig davon, was sonst im Spiel passiert (oder nicht passiert).