Jump to content
Unity Insider Forum

2 Animationen gleichzeitig abspielen


SyntaxTalkstoMe

Recommended Posts

Ich will ne Animation abspielen, während der Charakter !Grounded ist. Die Animation betrifft aber nicht direkt den Charakter selbst, sondern soll nur "am" Character mitfliegen.

Das hört sich zwar an sich einfach an, klappt aber nicht so wie gewünscht. Das mit den Layers habe ich schon probiert. Hab damit noch nicht solche Erfahrungen.

Allerdings das Ergebnis war, dass die neue Animation die Charakteranimation verdrängt. Bzw sie hatten sich abgewechselt und sind nicht gleichzeitig gelaufen.

Bei dem zusätzlichen Layer hatte ich Additive ausgewählt und Weight auf 1 gestellt. Im großen und ganzen, habe ich mich nach dem Tutorial gerichtet.

http://gamedevelopertips.com/unity-run-2-animations/

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hatte das Anfangs auch so wie du gepostet hast. Allerdings wird diese Animation dann nicht abgespielt. Außerdem werden dabei, obwohl es auf zwei Animatoren referenziert ist, wird immer nur eine Animation abgespielt. Muss mir das nochmal genauer angucken. Bestimmt irgendwo ein Logikfehler.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Herr, hilf mir ....

Ich hab irgendwie gerade einen ganz fiesen Hirnknoten.

Es will einfach nicht klappen. Entweder er spielt die Animation überhaupt nicht ab, oder sie wechselt sich mit der Character Animation ab.

Warum kann es nicht genauso einfach funktionieren wie Particle ein und auszuschalten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

ich hab soviel wie:

 

private Animator cloudAnim;

cloudAnim = GetComponent<Animator>();
  
  
  
  if(!Grounded && cloudAnim != null)
  {
  if(!cloudAnim.isPlaying)
  {
  cloudAnim.Play();
  }
  }

 

ich bin verschiedene Wege gegangen.

U.a. mit:

cloudAnim.SetTrigger(animation)

cloudAnim.Play("animation");

 

Über SetTrigger funktioniert es eher. Allerdings verdrängt die Animation dann immer die Animation des Characters. Was es nicht soll. Evtl brauch ich doch Layer.

Link zu diesem Kommentar
Auf anderen Seiten teilen

der eine heißt:

private Animator anim;
private Animator cloudAnim;


anim = GetComponent<Animator>();
  
cloudAnim = GetComponent<Animator>();

anim ist sozusagen für die Characteranimationen da und cloudAnim eben für diese eine spezielle Animation.  Die Componente Animator wird zwei mal referenziert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aha, da haben wir ja den Fehler. Du referenzierst dieselbe Komponente zweimal. Du musst aber zwei verschiedene Komponenten haben und dann jede einmal referenzieren.

Mit den Referenzen musst du dir das so vorstellen: Ein Mann ist Ehemann und Vater. Das Kind referenziert ihn als "Vater" und die Ehefrau ihn als "Ehemann". Das Kind kommt an und will, dass Papa es hochwirft und die Frau kommt an und will, dass er mit ihr Steuererklärungen macht. Obwohl hier von "Vater" (anim) und "Ehemann" (cloudAnim) die Rede ist, geht es um dieselbe Person (dieselbe Komponente) und die kann halt nicht beides gleichzeitig machen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Achso.

Dachte die ganze Zeit, man braucht jede Komponente nur einmal. Mir war das schon bewusst irgendwo. Hatte mich aber drauf verlassen das es geht. Ich hab es die ganze Zeit auf biegen und brechen so versucht. Deshalb flackerte auch die Animation und hat sich gegenseitg verdrängt. 

Aber jetzt noch ne dumme Frage vermutlich:

Wie kann ich im Code festlegen, welchen der beiden Animatoren ich ansteuern will? Geht das überhaupt? Oder muss ich ein neues GameObject als Child dem Charakter hinzufügen und dann einfach 

cloudAnim = GameObject.Find("cloud").GetComponent<Animator>();

da es nur ein GameObject gegeben wird mit "cloud" geht das ja. Oder:

cloudAnim = gameObject.GetComponentinChildren<Animator>();

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um aber nochmal eine kleine Optimierung vorzuschlagen: GameObject.Find und generell alles mit Strings sind Sachen, von denen ich abraten würde. GetComponentInChildren dagegen ist etwas unsicher, da es alles mögliche finden kann, je nachdem, wie sich die Hierarchie deines Objekts auf Dauer ändert.

In der Regel die beste Variante ist

[SerializeField]
private Animator cloudAnim;

[SerializeField] macht dasselbe wie public in der Hinsicht, dass du im Editor das Richtige Objekt einfach reinziehen kannst. Dann gibt's keine Verwechslungsgefahr mehr.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ah spitze.

Das wollte ich die Tage sowiso mal gucken was dieses [SerializedField] macht. Da hab ich gesehen, da gibt es ja noch mehr so Sachen in eckigen Klammern.

Das größte Problem bei mir ist, ich schnupper mal hier mal dort rein. :D Es gibt für mich noch soviel zu lernen. Meine Arbeitsweise ist evlt auch nicht die strukturierteste. Das führt manchmal zu Chaos. Aber ich arbeite dran.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das würd ich lassen. Der Witz am Trigger ist, dass er von alleine sofort wieder ausgeht. ResetTrigger ist mit ziemlicher Sicherheit nur für komische Sonderfälle gedacht.

So, jetzt debuggen wir mal.

  1. Gibt es beim Ausführen irgendwelche Fehlermeldungen in der Konsole?
  2. Setze ein Debug.Log("Hallo"); an die Zeile, in der der Trigger ausgelöst werden soll. Taucht das "Hallo" im richtigen Moment in der Konsole auf? Wenn ja, dann ist der Code nicht das Problem, sondern dein Animator oder dein AnimatorController. Wenn nein, dann ist dein Code nicht in Ordnung und der Trigger wird beim Animator gar nicht erst ausgelöst.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Das hatte ich schon getan mit dem Debug.Log. Er springt auf jedenfall rein.

ICh werde morgen mit dem SetTrigger wo anders reinmachen.

Ich habe nämlich eine Coroutine die prüft, ob der Character grounded ist oder nicht. Und wenn er nicht grounded ist, soll er den Trigger auslösen. Evtl ist es besser, die Animation zu triggern, wenn eine Toucheingabe registriert wird.

 

Hier trotzdem ein Bild vom Animator

 

ani.PNG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...