Jump to content
Unity Insider Forum
Sign in to follow this  
SyntaxTalkstoMe

2 Animationen gleichzeitig abspielen

Recommended Posts

Ich nehme an, es geht um sowas wie Oberkörper und Unterkörper? Ich kann da keine genaue Anleitung geben, aber wonach du suchst sind "Animation Layers".

  • Thanks 1

Share this post


Link to post
Share on other sites

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/

Share this post


Link to post
Share on other sites
vor 5 Minuten schrieb SyntaxTalkstoMe:

Die Animation betrifft aber nicht direkt den Charakter selbst, sondern soll nur "am" Character mitfliegen.

Das klingt, als wolltest du einfach zwei Animatoren benutzen?

Share this post


Link to post
Share on other sites

Dann verstehe ich deine Fragestellung nicht. Dein script referenziert einfach zwei Animatoren und ruft dann in jeweiligen Moment die passenden Methoden auf.

characterAnimator.SetTrigger("Jump");
friendAnimator.SetTrigger("Jump");

...oder so.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Tut es, aber in deinem Code oder in deiner Szene ist wohl ein Fehler. Poste vielleicht etwas Code.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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>();

 

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

DIe Euphorie hat ein jehes Ende gefunden. Es war ein versehen. Er spielt die Animation nach wie vor nicht ab.

 

Kann es sein, dass eine Coroutine die im Hintergrund läuft, nicht den Trigger auslösen kann?

 

Share this post


Link to post
Share on other sites

Eine Coroutine läuft nicht im Hintergrund ;)

Aber noch viel wichtiger: Du kannst in einer Coroutine alles machen, was du auch ohne machen kannst.

Zeig doch mal die aktuelle Version deines Codes.

Share this post


Link to post
Share on other sites
  if (permaRun && !Grounded())
            {
                CharakterMove();
                anim.SetBool("run", false);

                if (cloudAnim != null)
                {
                    cloudAnim.SetTrigger("cloudMage");
                }

 

asdgasdg.PNG

Zum zurücksetzen hab ich animator.ResetTrigger gemacht.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×