Animationen funktionieren nicht im fertigen Spiel

  • Hallo Leute,

    heute habe ich mal ein merkwürdiges Problem. Vielleicht kennen es ja sogar welche. Wenn ich mein Spiel im Editor teste, klappt alles wunderbar. Wenn ich es aber nun für Windows 64bit package (for shipping mit .pak), dann funktionieren teilweise meine Animationen nicht mehr. Entweder sie werden geskippt, also der Spieler bewegt sich ohne Anim oder sie werden gar nicht erst abgespielt. Ich benutze UE 4.27 vollständig Blueprint. Als Node verwende ich PlayAnimMontage. Ich denke beim Code sollte ja alles in Ordnung sein, schließlich ist im Editor alles perfekt.

    Hat jemand eine Idee? Geht beim build Vorgang irgendwas schief?


    Freundliche Grüße

    • Offizieller Beitrag

    Ich würde zuerstmal versuchen den Saved Ordner im Projektverzeichnis zu löschen und dann nochmal ein neues package machen.

    Möglicherweise wurden dort Fehler abgespeichert die beim Kochen mit einfließen.

    Nach dem dem Löschen des Saved Ordner wird dieser neu erstellt und dann hoffe klappen auch die Animationen.


    Dann kannst auch mal Logs im Auge behalten und die hier Posten.


    Du nutzt ja auch ne ältere UE Version ? Viellicht nutzt du Plugins die bei der 4.27 Probleme verursachen.

  • Saved Ordner habe ich gelöscht, hat leider nicht geholfen. Im Log habe ich ca. 1800 Warnings, die muss ich mal alle genau durchgehen. Was mir mit Animation aufgefallen ist: "Setting an additive animation on an AnimSingleNodeInstance is not allowed". Könnte das damit zutun haben?

    Plugins habe ich nur eins, das ist aber auch für die 4.27.

    • Offizieller Beitrag

    "Setting an additive animation on an AnimSingleNodeInstance is not allowed". Könnte das damit zutun haben?

    Klingt sehr danach aber dass ist so auch schwer zu sagen. Das ist als wenn du in einer Werkstatt anrufst und sagst: Hey mein Auto macht komische Geräusche, ist der Motor kaputt? Der Mechaniker wird dir sagen: "Das muss ich mir anschauen komm vorbei."


    Ich versuchs trotzdem mal zu erklären, dann kannst du dir ein eigenes Bild machen

    additive Animationen, sind Animationen die Interpoliert werden. Du hast zb Keyframe #1 das eine Steh Animation und du hast Keyframe#2 das ist eine geh Animation. Alles was dazwischen passiert wird interpoliert und automatisch berechnet.


    Das ist bei Normalen Animationen der Fall aber auch Blendshapes wo zb verschiedene Gesichtsausdrücke interpoliert wird. Aus einem Lachen und aus einem Weinen wird dann ein Zustand dazwischen. Das sind Blendshapes.


    Der Fehler deutet darauf hin das diese Interpolation aus irgend einem Grund nicht funktioniert. Da hier das Wort Instanzen mit dabei ist gebe ich dir mal ein Beispiel was das Problem sein könnte:


    1.Du hast einen Roboter Mech der besteht aus einem Linken und einem Rechten Teil.

    2.Beide Seiten sind Instanziert. Auf der Linken Seite passiert das selbe wie auf der rechten Seite.

    3. Jetzt hast du in deinem Blueprint irgend was eingebaut wo du die Linkeseite verändert wird nicht aber die Rechte Seite.


    Jetzt entsteht das Problem: Beide Seiten sind instanziert es sollen aber unterschiedliche dinge passieren.

    Und das geht nicht.


    Oder du willst zwei Charakter Animieren: Beide sind Identisch nur hat der eine zwei Arme und dem anderen fehlt ein Arm.

    Du Animierst aber bei beiden Charakter beide Arme. Da es aber eine Instanz ist, führt er die Animation bei beiden Charakter nicht aus und spuckt die Fehlermeldung aus.


    Wie gesagt das reine Theorie. Ich kenne deine Charakter nicht, ich keine dein Rigg nicht, ich kenne deine Animationen nicht und ich kenne deine Blueprints nicht.


    Bei Problemen sehen wir hier im Forum aber sonst immer nur was uns gezeigt wird. Aber wir sehen halt nicht was uns nicht gezeigt wird. zb dass es noch ein Blueprint gibt was dazwischenfunkt. Daher ist Hilfe so immer sehr schwer.


    Deine beste Möglichkeit ist es das Problem einzugrenzen und systematisch an die Sache ranzugehen. Versuch den Charakter erstmal in einem neuen Projekt hau Sachen raus und versuche rauszufinden was das Problem verursacht.

    Auch mal einen anderen Charakter probieren um zu sehen ob der Fehler dort auch auftritt.


    So kann man das Problem eingrenzen. Ich weiß macht kein Spaß und ist nervig.


    Ich glaube jedenfalls nicht das dir hier jemand die Lösung für dein Problem auf dem Silbertablett präsentieren kann.


    Das Problem bei Fehler ist oft auch das der eigentliche Fehler ein ganz anderer sein kann aber Unreal aus irgend einem Grund meint das diese Fehlermeldung am besten passt.

  • Danke für die Antwort, hat etwas länger gedauert, weil ich ja zum Testen immer packagen muss (bei mir ca. 45min).


    Ich bin meinen Log genau durchgegangen und habe mal angefangen die Warnings zu eliminieren. Bin jetzt von 1800 auf 250 runter. Der oben genannte Fehler tritt nur bei Animationen auf, welche "tote" Assets sind, also aktuell nicht in meinem Spiel. Also habe ich jetzt alles runter gebrochen, wie du es empfohlen hast.


    Zuerst habe ich ein blank Level erstellt und anstatt meinen Player-Char seinen Parent genommen. Siehe da, keine Probleme. Also ein blank Level und und den Player-Char -> auch keine Probleme. Nun habe ich überlegt, was der Unterschied zwischen meiner Spielwelt und dem blank Level ist. In meiner Spielwelt startet man mit einem Dialog mit einem NPC. Während man einen Dialog führt ändere ich den Montage Slot von Default zu "Uppderbody" (damit sehen die Animationen schöner aus). Somit habe ich mir gedacht, was wenn der Montage Slot nicht auf Default zurück geändert wird man das Gespräch beendet, wie es sein soll.


    Tatsächlich ist das auch der Fall gewesen, die Animationen wurden nicht abgespielt, weil einfach der falsche Slot im AnimBP aktiviert war. Aber warum funktioniert es im Editor und im Spiel nicht?


    Eine bool ist der Übeltäter. Wenn ein Gespräch beginnt wird "Talking" auf true gesetzt, wenn der Spieler auf Gespräch beenden klickt, wird diese wieder auf false gesetzt und so halt der AnimBP geupdatet. Im Editor funktioniert es auch alles, die bool wird erst true und dann false. Im fertigen Spiel nicht. Die bool bleibt auf true. Deswegen habe ich es mit einem Integer gelöst. Ist der Talking Int = 0 dann Gespräch und "Uppderbody-MontageSlot", ist der Int = 1, dann kein Gespräch und "Default-MontageSlot". Das funktioniert im Editor und im fertigen Spiel. Warum die bool nicht funktioniert weiß wahrscheinlich nur Unreal selbst oder ein C++ crack (ist auch nicht der erste Ärger den ich mit einer bool habe :D ).


    Jedenfalls danke für die Hilfe und den Gedankenanstoß

    • Offizieller Beitrag

    Tatsächlich ist das auch der Fall gewesen, die Animationen wurden nicht abgespielt, weil einfach der falsche Slot im AnimBP aktiviert war. Aber warum funktioniert es im Editor und im Spiel nicht?

    ich vermute mal das liegt daran weil dein Spiel im PiE Modus abgespielt wird. Das ist ist im grunde eine Simulierte Entwicklungsumgebung. Ein bisschen wie ein Baby was Nabelschur seiner Mutter angedockt ist. Unreal braucht zwar kein Essen vom Mutterschiff aber es braucht andere dinge um eine Entwicklungsumgebung zu erstellen.

    Damit das funktioniert erstellt Unreal eine Reihe von dingen die es dafür braucht. Ich vermute deswegen funktioniert es im PIE Modus aber nicht im Kompilierten Modus.

    Solche Probleme können im im fertigen Modus auftreten und sind nicht ungewöhnlich. Das Spiel zu Kompilieren gehört deswegen zur Qualitätssicherung dazu.


    Eine bool ist der Übeltäter. Wenn ein Gespräch beginnt wird "Talking" auf true gesetzt, wenn der Spieler auf Gespräch beenden klickt, wird diese wieder auf false gesetzt und so halt der AnimBP geupdatet. Im Editor funktioniert es auch alles, die bool wird erst true und dann false. Im fertigen Spiel nicht. Die bool bleibt auf true. Deswegen habe ich es mit einem Integer gelöst. Ist der Talking Int = 0 dann Gespräch und "Uppderbody-MontageSlot", ist der Int = 1, dann kein Gespräch und "Default-MontageSlot". Das funktioniert im Editor und im fertigen Spiel. Warum die bool nicht funktioniert weiß wahrscheinlich nur Unreal selbst oder ein C++ crack (ist auch nicht der erste Ärger den ich mit einer bool habe :D ).

    Du hast vermutlich mehre Boolean in einander verschachtelt. Das kann natürlich dazu führen, das eine menge Booleans auf True gesetzt werden müssen damit der letzte dann auch auf True steht *dead*
    Wenn da zb ein Boolean auf True gesetzt wird, wenn eine Animation fertig ist, diese Animation wird aber bevor sie fertig ist von einer anderen Animation unterbrochen und deswegen nicht fertig, dann können genau solche Probleme auftreten.


    Das ist eine reine Vermutung und ein Böser Verdacht :)

    Vielleicht mal als Idee:

    Du könntest zb nach jedem Sprachdialog den Boolean auf True setzen aber nur wenn der Vorige auch auf True gesetzt wurde. Wenn nicht starte den letzten Sprachdialog neu. Dadurch hast du die Sicherheit dass nichts übersprungen oder ausgelassen wurde.

    Bevor du den Dialog verlässt, prüft du nochmal ob alle Booleans alle auf True sind wenn nicht starte den Dialog neu oder setzte alle Booleans auf True.

    So könntest du beispielsweise solche Bugs abfangen.

    Auch wenn du Dialoge "Skipen" tust, dann kannst den Boolean ja auch True setzen auch wenn die Animation nicht abgespielt wurde.

    wenn zb auf Weiter drückst oder so.

    Du machst sonst abhängig von Animationen. Entweder Skip = True oder Animation Ende = True


    PS.: Es ist auch kein Fehler erstmal alle Fehler rauszubekommen. Sonst hast irgend 1 Millionen Fehler hast dann tagelang Spaß alle Fehler zu finden. Und merkst vielleicht das manche Plugins gar nicht mehr korrekt funktionieren.

  • Danke für die ausführliche Erläuterung, da werde ich mich definitiv nochmal ran setzen.


    Nach mehreren 1000 Stunden Arbeit werde ich mir erstmal Feedback zu meinem Projekt einholen, je nachdem wie es ausfällt, werden es zukünftig vielleicht weniger Stunden.