Wie vermeide ich Spaghetti im Animator?

9

Ich arbeite mit Animationen in Unity und habe bisher nur vier gemacht (Up Down Left und Right) und mein Animationsfenster sieht wie folgt aus ... Geben Sie hier die Bildbeschreibung ein

Das Problem ist, dass ich, wenn ich mich nach oben bewege, möchte, dass der Held nach oben schaut und nicht in den neutralen Leerlauf wechselt (oder wie auch immer er angefangen hat), aber das bedeutet, dass ich 4 Leerlaufpositionen habe ... und jede von ihnen kann nach oben, unten wechseln , Links oder Rechts und sie gehen exponentiell mit jeder zusätzlichen Aktion ...

Was mir das Gefühl gibt, dass ich etwas falsch mache ...

Gibt es eine bessere Möglichkeit, Übergänge zwischen verschiedenen Aktionen vorzunehmen?

Matas Vaitkevicius
quelle
Ich habe lange versucht, dies zu tun. Leider ist meine Schlussfolgerung, dass Sie einfach nicht können. Animator verwandelt sich IMMER in ein Netz aus Spaghetti und wir müssen damit leben. Schauen Sie sich dieses Video an, es hilft youtube.com/…
Nevermind

Antworten:

9

Sie können diese Art von Problem mit BlendTrees lösen (im Allgemeinen ist es ratsam, sich häufig auf Mischbäume zu verlassen). Der Mischbaum ist eine Art Multi-Animationsstatus, der basierend auf einem (Float-) Parameter entscheidet, welche der darin enthaltenen Animationen aktuell aktiv ist (oder alternativ kann die resultierende Animation eine Mischung aus mehreren Animationen sein). Selbst wenn die Animationen nicht gemischt, sondern ausgetauscht werden, erfolgt der Austausch mitten in der Animation (dh wenn die "verlassende" Animation bei 35% liegt, wird die neue Animation ab 35% abgespielt). Von außen ist alles verborgen, als wäre es ein einfacher / einzelner Zustand.

Zum Beispiel haben Sie einen Mischbaum mit 8 Sprite-Animationen (Leerlauf mit 4 Haupt- und 4 Diagonalrichtungen). Dieser Mischbaum enthält zwei Parameter: "horizontal" und "vertikal". Basierend auf diesen beiden Parametern entscheidet der Mischbaum, welche Animation abgespielt werden soll. Basierend auf dem Parameter "horizontal" wählt der Mischbaum zwischen der Animation links / rechts und dem Parameter "vertikal" die Animation oben / unten. In Kombination haben Sie dann alle 8 Animationen mit Diagonalen (es ist dieselbe Idee, die hinter Joypads / Joysticks steckt).

Geben Sie hier die Bildbeschreibung ein

Es ist ein bisschen verwirrend, auch wenn StackExchange keine Links mag, werde ich ein kurzes Beispielvideo verlinken, das ich gemacht habe. Beachten Sie den oberen rechten Teil des Bildschirms. Die grauen Punkte sind die "Zustände" / Animationen und der aktive ist derjenige, der sich dem roten Punkt nähert. Wie eingangs erwähnt, kann es noch komplexer sein und jede Animation kann einen Einfluss / eine Stärke haben, die auf ihrem Abstand zum roten Punkt basiert, was zu einer Mischung zwischen mehreren Animationen führt.

Von außen ist es nur ein Zustand (Mischbaum), und wenn Sie dasselbe Konzept für Gehen und Angreifen anwenden, sind nur drei Zustände verknüpft.

Mischbäume werden mit einem Rechtsklick auf einen leeren Animatorbereich erstellt. Status erstellen -> Aus neuem Mischbaum. Von dort ist alles im Inspektor. Wenn der Mischbaum ausgewählt ist, können Sie den Typ des Mischbaums (1D, 2D usw.) auswählen, Animationen hinzufügen, positionieren (relativ zu Parameterwerten) und die Steuerparameter auswählen.

Wenn Sie weitere Informationen zu Blend Trees wünschen, finden Sie als Nächstes Videos von Unity - Unite 2016 und Unity Tutorials .

Nikaas
quelle
2

Das Problem hierbei ist, dass Sie versuchen, alles zusammenzubinden, anstatt einen Auslöser zum Umschalten zwischen Leerlauf zu verwenden. Sie sollten die Leerlaufanimation mit einer Bedingung vom Typ if-else oder switch-case auswählen. Ich habe ein Diagramm erstellt, das viel übersichtlicher aussieht (angenommen, eines davon ist der Standardfall):

Geben Sie hier die Bildbeschreibung ein

Zusätzliche Information:

In den Animationsparametern erfahren Sie, wie Sie Parameter festlegen, die der Animator erkennen soll, Zustandsmaschinen zum Kombinieren von Animationen und Zustandsmaschinenverhalten zum Überprüfen der von Ihnen festgelegten Variablen.

John Hamilton
quelle
Hallo John, aber wie mache ich das eigentlich? Warum sollte ich den Auslöser verwenden, um zwischen Leerlauf zu wechseln oder überhaupt zwischen Leerlauf zu wechseln? Wie wähle ich Leerlaufanimationen aus, wenn sonst? Auch im Diagramm, warum ich in den Leerlauf und dann nach links und nicht nach links gehen und in den Leerlauf gehen würde, um auf die nächste Aktion zu warten, oder sollte dies umgekehrt sein?
Matas Vaitkevicius
@MatasVaitkevicius Sie können Variablen am Ende oder Anfang von Animationen festlegen und überprüfen. Sie können eine leere Animation erstellen, die nichts anderes tut, als den Fall zu überprüfen und ihn dann zum nächsten Teil umzuleiten oder daraus eine Abstraktionsebene zu erstellen. Ich habe ein paar Links zu den Handbüchern hinzugefügt, um weitere Informationen zu erhalten.
John Hamilton
Wie mache ich es, wenn sonst mit Parametern, die die Übergänge wechseln würden? Es gibt kein Beispiel dafür, dass alle von Ihnen verknüpften Mechanismen nur einen manuellen Übergang durchführen, wie ich es in der Frage getan habe ...
Matas Vaitkevicius
@ MatasVaitkevicius Sie sollten wirklich zuerst ein bisschen suchen: gamedev.stackexchange.com/questions/103611/…
John Hamilton
Aber so habe ich es gemacht. Löse Feuer aus und starte die Animation, dann geht sie für diese Richtung in den Leerlauf ... Nun, was du sagst (wenn ich dich richtig verstehe), dass ich nach der Animation, anstatt für diese Richtung in den Leerlauf zu gehen, den Mechanismus umschalten könnte würde einen geeigneten Leerlauf für mich wählen ... aber ich habe nirgendwo einen solchen Mechanismus gesehen, könnten Sie ihn bitte in Ihre Antwort kopieren ...
Matas Vaitkevicius