Timeline ungenau

  • Guten Abend ihr Lieben, ich mal seit langer Zeit wieder :)


    Kennt sich Jemand ein wenig mit Timelines in der ue4/5 aus? Ich hab eine animierte Plattform, die über 'ne Timeline hoch und runter schwebt. Das Problem ist nur, dass die Timeline an sich sauber einprogrammiert ist aber die Animation ist total unsauber und schludrig. Mal schwebt die Plattform zu niedrig oder zu hoch und mal kommt sie gar nicht richtig runter bzw hoch. Ich kann mir gut vorstellen, dass die Animation ein wenig von den Frames abhängig ist, die die Engine beim spielen bzw. simulieren schafft. Bekommt man das auch anders gelöst, dass auch wirklich alles akkuart abgespielt bzw. animiert wird?

    Danke schon mal und einen schönen Abend!

  • So ein ähnliches Problem hatte ich auch (wahrscheinlich gibt es auch eine bessere Lösung)


    Die Lösung für mein Problem war die Anim Curve.

    Die Curve gibt einen Wert anhand der abgespielten Animation aus. (Bei mir war es ein Winkel)

    Kann mir gut vorstellen, dass der Ansatz auch für die Position deiner Plattform funktioniert

    • Offizieller Beitrag

    Du Steuerst per Blueprint die Timeline ?


    Ich kenne dein Blueprint nicht und weiß auch nicht was dein Blueprint macht. Daher kann ich nur blind raten:

    Für mich hört sich dass nach Rundungsfehler in Floatwerten an. Versuch doch mal statt float testweise Integer zu nehmen.

    Das würde zumindest diese Random zahlen erklären.

    Bei einer TImeline Animation, werden ja immer nur mindestes zwei Keyframes Interpoliert. zb "Aufzug oben" und "Aufzug unten"

    Jeder Step dazwischen, wird von der Engine berechnet und zwar nur diese Steps. Ich kann mir nur erklären, dass deine Blueprints da dazwischenfunken.

    Im übrigen, solltest du die Animation nur starten und nicht immer ein Frame weiter springen. Wenn du das gemacht hast, gibts dafür viele mögliche Ursachen.


    Entweder diese Float Sache oder irgend ein anderen Logik Problem in deinem Blueprint. Check doch mal per printstring was mit deinen Transforms passiert wenn sich der Aufzug bewegt.

  • Fuchsnerichen mit Animation Curves muss ich mich erst mal noch beschäftigen :)

    Sleepy Ein Integer macht es leider nur schlimmer.


    Ich pack mal das Blueprint mit dazu, wäre vielleicht etwas schlauer :D

  • Bin jetzt mit Unreal nicht so vertraut, aber macht man das heute mit DELAY? Ich habe die Bewegung immer über "delta Time" gemacht.


    Delay hört sich für mich an wie "warte mal und mache NICHTS", aber wenn es blöd läuft ist die Animation an einem anderen Punkt, aber genau dann wenn es gebraucht wird hängt die Funktion im DELAY fest...


    EDIT: Und warum braucht man bei einer Animation DELAY? :/

  • Da muss ich Gombolo recht geben. Das Delay würde ich gegen ein Timerevent tauschen.

    Was ich vermute, ist auch, dass das Delay vielleicht zwischendurch auslöst, obwohl die Timeline noch gar nicht am Ende ist.

    Wenn ich deine Timeline richtig verstanden habe, dann wird die Platform eh in einem Zug rauf und runtergefahren. Vielleicht solltest du mal versuchen nur eine Richtung in die Timeline zu setzen und wenn die eine Animation finished ist reverse abspielen.

  • Die logik im Blueprint scheint mir nicht ganz so sinnvoll.

    Über Add World offset, gibst du den ganzen ja ein Positions Delta vor, d.h. es ist so als ob du Geschwindigkeit vorgibst, die jedoch je nach Framerate anders ist, da DeltaWeg= Geschwindigkeit * Zeit und die Zeit ist ja variabel da UE4/5 variable frame rate hat.


    Folgendes:

    A) Die Kurve soll eine Geschwindigkeit sein --> Multiplizier den Wert mit dem DeltaTime bevor du es in Add World Offset gibst, dann ist es physikalisch korrekt denn DeltaWeg= Geschwindigkeit * Zeit

    B) Die Kurve soll eine Positionsangabe sein -> Nimm lieber Set Position (absolut) or Set Relative Position. Bei letzterem solltest du sicherstellen, dass dein Plattform Actor ein Rootcomponent hat (z.B. ein SceneComponent als Root) welches sich nicht bewegt und die Plattform selbst (Mesh und Collider) Child Components sind. Du könntest dann über die RelativPosition der Components die Verschiebung zum RootComponent steuern.

    • Offizieller Beitrag

    Ja ganz genau, die Delta TIme ist dein Problem nur fürs Verständnis:


    Allgemein zu den Deltas:


    Delta: Time ist die Zeit zwischen dem Letzten Frame.(Die Zeit die zwischen Frame A und Frame B vergangen ist.

    Delta Location: Ist die Änderung einer Position in einer bestimmten Zeit. (Das Klassische wie lange brauchst du von 0 auf 100

    Delta Rotation macht das selbe nur für die Rotation.


    Mal angenommen du spielt mit jemand Online der einen besseren Rechner hat. Somit hat er möglicherwiese mehr Frames pro Sekunde als du.

    Würdest du die Deltatime als Berechnungsgrundlage für die Geschwindigkeit nehmen, so würden sich seine Truppen schneller bewegen als deine.


    In deinem Blueprint veränderst du die Deltatime. Im Grunde veränderst du die Zeit zwischen zwischen zwei Frames und deswegen diese seltsamen Unstimmigkeiten bei den Frames bzw der Geschwindigkeit.


    Jede Sekunde soll ein Frame angezeigt werden. Du sagst Unreal aber er soll zb alle 2 Sekunden einen Frame anzeigen.

    Ich weiß nicht was genau dann passiert aber es passieren auf jeden Fall komische dinge.

    Entweder er überspringt Frames oder er wartet mit der Frame Darstellung .



    Der Gedanke der Deltas ist genau umgekehrt. Wenn das Spiel beim Spieler A Lagt, kannst du seinen Lag messen und einem anderen Spieler den selben Lag verpassen auch wenn es bei ihm eigentlich nicht lagen Würde. Sonst würde es beim Spieler B flüssig laufen und spieler A würde immer ein paar Frame hinterher hängen.


    Was noch hinzu kommt: Während ein Delay ausgeführt wird und der Delay wartet, können keine weiteren Aktionen ausgeführt werden.

    Im Grunde hältst du dass was passiert an und es geht erst weiter wenn der Delay fertig ist.


    Die Logik solltest du nochmals überdenken.


    https://de.wikipedia.org/wiki/…r%20der%20Unreal%20Engine.


    BTW.: Ein Tick Event ist nicht eine Sekunde sondern die Zeit zwischen zwei Frames. Wie oft der Tick ausgelöst wird, ist also abhängig davon wie viele Frames dein Rechner auf den Monitor zeichnen kann.


    Bei 60 Frames pro Sekunde dauert der Tick etwa 16,6 Milisekunden. Bei einem langsameren Rechner dauer der Tick entsprechend länger

    Aus dem Tick Event kannst du die Delta TIme auslesen.


    Die Delatime gibt dir den Wert zurück wie lang der Tick genauert hat. Also die Zeit zwischen Frame A und Frame B.


    Beeinflusse nicht die Delta time und verzichte auch besser auf den Delay. Beides wurde ja als Problemlösung bereits gesagt.