Jump to content
Unity Insider Forum

Animaition wird beim zweiten/dritten mal nicht abgespielt


gombolo
 Share

Recommended Posts

Hallo, ich animiere ein Objekt. Beim ersten mal klappt es auch, aber wenn ich das Objekt ein zweiten mal animieren möchte passiert nichts mehr. 

Ich habe schon ein paar Sachen versucht wie z.B. die Zeit auf 0 zu setzen und solche Sachen, aber nichts hat geholfen. Bin ein wenig Ratlos? 

Link to comment
Share on other sites

Hallo, ja Du hast Recht :)  Ich versuche das mal zu konkretisieren...ich habe jedoch schon wieder alle gelöscht und habe mal schnell was zusammengestellt.

rakete.thumb.png.7eecafdd928d2cd5df73e7f471fe0662.png

Der Gegner hat Raketen an Bord (Bild1)....diese kann es abfeuern...siehe Bild2. Wenn diese abgefeuert werde, dann bewege ich die Raketen, welche in der Abschussrampe sind über eine Animation ganz schnell unter das Raumschiff. Jetzt kann man es nicht mehr sehen. Nach ein paar Sekunden kann der Gegner wieder schießen und die Raketen sollen langsam wieder in Erscheinung treten. Siehe in Bild zwei...wo man schon die Spitzen der Raketen sehen kann.

Die Bewegung habe ich jetzt versucht einzeln zu animieren.

rakete2.png.68135c27c737aedc580b1fa4385add33.png 

Für jede Animation habe ich einen Layer erstellt. Diese wird zur "Hauptanimation", weil das Raumschiff sich auch noch im Raum bewegt dazu addiert werden. 

Beim ersten Durchlauf funktioniert das auch ganz gut. 

mit ->

animator.Play("Rocket.RocketStartLO");

bewege ich die Raketen links oben nach hinten und man kann diese nicht mehr sehen

mit ->

animator.Play("RocketOnPosition.RocketOnPosition");

fahren ich die Raketen wieder vor.

aber das geht leider nur einmal und dann nicht mehr....

Soll ich das ganze vielleicht lieber in einen Layer packen und dann über Parameter ansteuern? 

Danke für Eure Vorschläge und Ideen :) 

 

Link to comment
Share on other sites

Layer scheinen mir schon sinnvoll dafür, damit du die Animationen kombinieren kannst. Man könnte jetzt natürlich überlegen, für jeden der Raketenwerfer ein eigenes Objekt mit eigenem Animator zu machen, aber Layer sollten auch gehen. Davon unabhängig ist Macanim aber schon dafür gedacht, dass du Parameter benutzt statt Play(). Dann kannst du auch vernünftig Transitionen zur Laufzeit debuggen.

  • Thanks 1
Link to comment
Share on other sites

Problem gelöst....hier kann man sehen wie die Raketen wieder beladen werden :)

 

nun zur Lösung...

Tatsächlich positioniert sich ein Objekt wieder in seine Ausgangsposition zurück, wenn die Zeitleiste zu Ende ist. Das kann man über Layer und additive Animation lösen, was ich auch teilweise gemacht habe, aber in meinem Fall wird noch der Gegner animiert und wenn es einen gewissen Zerstörungsgrad hat, dann fliegen die Flügel weg und auch das muss animiert werden und der Rumpf fliegt dann mit einer anderen Animation. Wer Lust hat kann sich das mal auf meinem youtube-Kanal mal ansehen.

Die Raketen habe ich so gemacht, das verstecken nach dem Abschießen und das Erscheinen ist nur eine Animation. Ich setze einfach die Geschwindigkeit auf 0 und halte so die Animation an. Dazu habe ich einen Trigger in die Animation gepackt und in C# schreibe ich einfach:

 

animator.SetFloat("RocketLOSpeed", 0f);

Die Variable sollte auch vorher im Editor unter Parameter erstellt worden sein (im Reiter Animator)

Das "Beladen mit Raketen" geht ganz einfach....die "Speed"-Variable wieder auf 1.0f setzen und schon fährt es vor. 

So sieht das aus: 

image.png.1b1984381fa3273433e6fc4d4af75cd5.png

Das habe ich für alle vier Abschussrampen gemacht...

Natürlich nicht vergessen in der Transition auch einen Trigger zu definieren wann die Animation starten soll...

image.png.8579445e308726b25e1651140bfa0fb2.png

hier nennt sich das RocketStartRO

und das war es schon...

------------------------------------------------------------------------------------------------------------------------------------------------------

EDIT:EDIT....gibt es eine Möglichkeit, wenn eine Animation durchgelaufen ist, die Position beizubehalten, wenn man in eine andere Animation spring. 

Wenn die Zeitleiste zu Ende ist, dann springt das Objekt zurück in ihre Ursprungsposition.

EDIT: 

  • Wenn ich beim Start das Objekt an Position Z = 100 positioniere
  • Dann über Animation 1 auf Position Z = 50 bewege
  • Dann über Animation 2 wieder nach Vorne bewege um 50 Einheiten
  • Dann startet Animation 2 trotzdem an Position 100 und beendet die Bewegung an Position 150
  • ...und spring dann auf die Endposition 100

Ich denke Animation beginnen immer an der Position, an der das Objekt zum Zeitpunkt der Aktivierung war...Ich habe in diesem Fall das Layer auf Addieren gestellt, aber beide Animationen sind im selben Layer!


 

 

Ich habe das jetzt über Parameter gemacht in eigenen Layern und es funktioniert schon mal...bis auf eine blöde Sache...

image.png.bdf49fa44b700db107912d436e806e70.png

Wenn die Raketen rausfahren, dann über den Rand hinaus und dann springen diese zurück auf die Endposition.

 

Die Animation passt jedoch und auch in der Vorschau macht es das was es soll, aber nicht im Spiel...wenn mir das noch jemand erklären könnte....Ich habe das Gefühl die Animation startet einfach schon von der Position her zu hoch und nicht dort wo es starten sollte, aber am Ende der Animation springt es dahin wo es auch am Ende sein sollte.

image.png.442c742a940dae43b18ace9b6d88b025.png

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...