Suche gutes Tutorial für Rotation im Stand und für Kopfbewegungen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Funktioniert soweit ganz gut... jedoch leider nicht im Multiplayer.

    Kennst du da vielleicht eines Condor?
    Im Multiplayer verdrehen die ihren Kopf und es gibt Probleme mit Abstürzen.

    Einmal ist UE4 abgestürzt, dann einen Bluescreen und MyCharacter war zerstört :(


    Habe noch Offset Animationen die ich gerne dafür verwenden würde, vor allem auch für die Rotation.
  • Ich will das ja für mein online Rollenspiel haben.

    Die Off-Set für Kopfbewegung und Drehung im Stand sind vorhanden, nur schaffe ich es irgendwie nicht es so zu machen, dass der Wert nach der Drehung wieder auf 0 gesetzt wird.

    Problem dabei ist das -180 und +180, bei diesem gewissen Punkt wenn man überschreitet, wobei so weit soll es gar nicht drehen.
  • Ich hätte da etwas aus meinem FPS Projekt. Bin aber leider bis nächstes Jahr nicht an meinen Hauptrechner, daher kann ich dir erst dann was geben.
    Wollte das ganze so oder so auf ein anderes (Test-)Projekt übertragen. In dem Zuge könnte ich es auch hier dokumentieren.

    Ist es schlimm wenn etwas C++ dabei ist? Ich überlade dabei nämlich die FaceRotation() Funktion des Charakters, um die Engine Konventionen möglichst sauber (nach meiner Interpretation) einzuhalten.
  • Tomura schrieb:

    Ich hätte da etwas aus meinem FPS Projekt. Bin aber leider bis nächstes Jahr nicht an meinen Hauptrechner, daher kann ich dir erst dann was geben.
    Wollte das ganze so oder so auf ein anderes (Test-)Projekt übertragen. In dem Zuge könnte ich es auch hier dokumentieren.

    Ist es schlimm wenn etwas C++ dabei ist? Ich überlade dabei nämlich die FaceRotation() Funktion des Charakters, um die Engine Konventionen möglichst sauber (nach meiner Interpretation) einzuhalten.
    Danke für deine Mühen, jedoch kenne ich mich nicht mit C++ aus, daher Blueprint only bitte :)
    Bisher läuft in meinem Projekt alles sehr gut und es ist schon sehr viel integriert.

    Nur fehlen mir noch diverse Kleinigkeiten, etwa Rotation von Bewegung + Kopf.
    Wenn ich das soweit noch hinbekomme, kann ich schon bald die erste Präsentation meines Projekts machen.
    Es wird ein Spiel was es bisher noch nicht gegeben hat.

    Der Kampfmodus funktioniert auch schon sehr gut, nur noch mit ein paar unverständlichen Fehlern.
    Vor allem in der Reichweite der Angriffe, scheinbar ist das noch ein Bug in UE4.

    Natürlich alles im Multiplyer über dedicated Server (Hauptspieleserver).
    Leider vergesse ich das häufig zu erwähnen.


    Die Monster Ki ist auch schon in seiner basis vorhanden, soweit mit allen nötigen Features :)
  • Todesklinge schrieb:

    Problem dabei ist das -180 und +180, bei diesem gewissen Punkt wenn man überschreitet, wobei so weit soll es gar nicht drehen.
    Der Trick ist sog. Limitierungen einzubauen. Ich weiß nicht mit welcher Software du arbeitest, das macht mal überall gleich.

    Ich schätze mal dein Problem wird sein das zb dein Kopf bei einer bestimmten Bewegung flipps und sich dann beispielsweise einmal um 360 grad dreht und somit das Rigg zerstört wird ?
    Das Problem dabei ist, das dein 3D Programm und auch die UE4 nicht weiß in welche Richtung der Kopf gedreht werden soll für dich erscheint das logisch aber für eine Maschine nicht. Sie nimmt einfach den kürzester Weg.
    Wenn dein Kopf nun in der Pos. -90 grad ist und soll zb auf + 180 Grad gedreht werden kommt es zu solchen Problemen.
    Wenn du nun aber Li­mi­tie­rungen einbaust im dem du dem Head Joint sagt du darfst dich in der X Achse nur zwischen -30 und + 30 Grad bewegen und in der Z Achse nur zwischen -20 und + 30 usw dann bleibt deinen Rigg nichts anderes übrig als korrekt zu funktionieren.

    OIch gehe mal davon aus dass du Blender nutzt:
    docs.blender.org/manual/en/dev…sform/limit_rotation.html

    Ohne es mir durchgelesen zu haben.

    EDIT.: Was übrigens auch wichtig ist: Du musst die Joints immer reseten auf 0 setzen. In Maya heißt die Funktion Freeze Transformation. Wenn dein Bone eine Local X Rotate Postion von 37,3689 hat, kann jedes Programm durcheinander kommen. (Du müsstest zb 37,3689 + 90 grad rechnen)
    Sind die Positionen aber auf null ist die rechnung relativ einfach = 0 + 90 grad

    Ich hoffe ich hab dein Problem richtig erkannt.
  • Habe es nun soweit hinbekommen das es entsprechend funktioniert, zumindest im Stand.

    Wenn ich mich zurück bewege, dann ruckelt mein Kopf sehr stark auf Client 1.
    Bei Client 2, sieht Client 1 korrekt aus.

    Scheinbar läuft es besser im Multiplayer, wenn andere einen anschauen, bei einem selber ruckelt der Kopf wie als hätte man Pakinson.

    Der Rotator Wert bei Client 2 und Server von Client 1 sind identisch, nur der eigene Client 1 Wert stimmt nicht mit den anderen überein :(

    Wenn ich vorwärts bewege läuft alles korrekt und es gibt kein zuckeln.
    Auch seitwärts läuft es deutlich besser als rückwärts.


    Ich finde den Fehler nicht und Authority -> OwningClient und Server brauche ich, weil sonst geht nichts und/oder es ist immer falsch.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Todesklinge ()

  • Ich glaube, es klingt sogar logisch, dass es passiert. Dieser script wird auf dem eigenen client nicht abgespielt. Ich wollte mein video noch nicht veröffentlichen, aber ich zeige dir das mal, evtl hilft mein Video dazu, warum das so ist. Dort wird erklärt, wie etwas repliziert werden soll. Später kommt noch einiges hinzu, aber das wichtigste ist vorhanden. Wenn du das verstanden hast, weis ich, dass das Video was taugt ^^

  • Super Video, da muss ich wohl noch einige Dinge in meinem Projekt ändern, vor allem das mit dem Lag... daran habe ich noch nicht gedacht.
    Du könntest noch einmal darauf eingehen was das "Reliable" auf sich hat und was genau das Switch macht.
    Noch dazu läuft der Event Tick automatisch auch auf dem Server, während eine manuelle Eingabe (Tasten) noch extra weitergeleitet werden müssen (vergisst man sonst häufig).

    Ich komme trotzdem nicht auf die Lösung, auch wenn ich da so viel herum stelle :(

    Bezüglich dem Video:
    Mit welchem Programm nimmst du das auf?
    Wie groß ist die Aufnahme und mit welchem Programm komprimierst du das, bzw. wie groß ist dann das Video am Ende?
    Wie schnell ist dein Upload vom Internet und wie lange hat es gedauert bis es auf Youtube war?
    Welches Mikrofon verwendest du?

    Die Infos wären für mich sehr praktisch, da ich wissen müsste mit welchen Datenmengen ich bei den zukünftigen Videos zu tun bekomme.
    Mein Upload ist leider nur 0,5mb/s, Download ist 6mb/s.


    Wenn ich den Dedicated Haken rausnehme und dann spiele, ruckelt auch nix mehr und alles läuft super.
    Also scheinbar liegt das doch bei mir im Replication Bereich.


    PS: Wie stelle ich ein das die Fenster automatisch links und rechts sind (so wie bei dir)?
    Die springen immer in die Mitte zurück wenn ich beende und erneut auf play in new window drücke.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Todesklinge ()

  • Ich weis gar nicht wo ich anfangen soll ^^
    Erstmal, es gibt ein Node "switch has authority". Da benötigst du den branch nicht.
    Der Client liest nur die Daten, anstatt sie zu setzen, bei dir tun beide das. Entweder separieren, sodass jeder auch sein eigenes errechnet und nur an andere weiter gibt, oder ab KopfRotationOwningClient nur lesen(lag anfällig). Dedicated hat kein Spieler, desswegen funktioniert controlRotation nicht. Da bekommst du immer nur 0. Genau da liegt das Problem. Der Client setzt den Wert, aber der Server setzt auch den Wert. Somit kommt mal dein Wert, mal den Wert vom Server. Dass ist dein zucken.

    Programmaufnahme Geforce Experience
    Die Größe variiert sich je nach du die quali einstellst. bei mir wurde die Aufnahme 700mb groß.
    Micro: thomann.de/de/the_tbone_sc450_usb.htm
    Mein upload ist nur ein 2000 bit/s. Also langsam. Die Zeit kann man sich ausreichen, 250kb/s.

    Die Fenster musste ich nur verschieben. Mit Shift + F1 hast du die Maus frei und dann kannst verschieben. Die Größe muss aber eingestellt sein, die bleibt nicht so, wie du sie skalierst.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Dj EKI ()

  • Kann ich das irgendwie temporär umgehen, damit das zuckeln aufhört?
    Für die Projekt Vorstellung wäre es schon sehr wichtig.

    Wie genau meinst du das mit ab "KopfRotationOwningClient" nur lesen, wie macht man das?

    Am liebsten wäre es mir, wenn beide Werte zusammen gerundet werden, so das am Ende nur einer erscheint und nicht zwei seperate, weshalb es ja zu dem zuckeln führt.
  • Es ist schwer dass zu erklären. Du hast sowieso ein kleinen sonderfall mit Tickrate. Du bist nicht mal verpflichtet, alles vom Server auf den Client zu schicken. Also dein Custom Client Node ist nicht nötig. Da der Charakter auch auf dem anderen PC existiert und die Tickrate sowieso aktiv ist, brauchst du an der Stelle nur lesen. Trennen kannst du mit "is controlled" und einem branch.
    Damit will ich bezwecken, Der Spieler selbst schreibt die Daten. Die Charaktere die im Clienten als Nebenperson sind lesen dann nur die Daten. Dein KopfRotation Variable ist doch repliziert. Also nur Schreiben ist nötig und lesen muss nicht mit ein custom node wieder vom Server zum clienten gesendet werden, da die Tickrate sowieso dafür ständig sorgt. Auf jedenfall können deine beiden Custom Nodes nicht den selben Script ausführen, da der "GetControllRotation" auf dem Server nicht funktioniert. Ich bin sowieso etwas verwundert, dass der Script teilweise funktioniert, da der Get Controll Rotation nur auf dem Server ausgeführt wird, also auch ab dem Custom Server Node . Hat warscheinlich in dem zusammenhang trotzdem noch ein Bezug zum Spieler.

    In diesem Stile:
  • Brachte leider auch keine Lösung, komischerweise ruckelt es nur wenn ich rückwärts gehe.

    Vorwärts und schräg vorwärts (links oder rechts) ruckelt es nicht, bis minimal (nicht wirklich sichtbar).

    Wie auf deinem Screenshot führt dazu das ich nur in eine Richtung mich bewegen kann, eben vor oder nur zurück aber nicht seitwärts mit Drehung oder eben der Kopf- und Standrotation.
  • jetzt check ich es grad, du hast es nach dem video gemacht. das im video ist absolut nicht multiplayer tauglich. Die beste vorgehensweise ist, man berechnet im Charakter die Rotation, die wird im charakter in einer Variable gesetzt die repliziert wird. Der AnimationsBP holt sich nur die variable und setzt somit die Modify bone. Damit hättest du schon mal keine probleme, dass du dich mit extra nodes um replicationen kümmern musst. Die sachen mit Charakter rotation und andere sachen müssen nicht repliziert werden. Dafür sorgt replication movment. Bei einem bin ich mir nicht so sicher, ob Use Controller Rotation auf dem Server ausgeführt werden muss. Dies könnte dein Fehler beheben. Aber so wie du den jetzt hast nicht komplett auf dem server ausführen lassen. Für dich reicht nur ein custom node, der auf dem server ausgeführt wird und nur die Rotation setzt, ohne es zu berechnen. Lass ruig den client das errechnen. Reliable setzt du dafür nicht, denn es gibt wichtigere dinge, die zu 100% repliziert werden müssen. Das kostet dich nur Leistung und für den Kopf unnötig.
  • Gibt es denn ein anderes Tutorial was Multiplayer fähig ist und genau das gleiche verwendet, bzw. das gleiche Ergebnis hat?


    Die Rotation wird auch im Charakter berechnet, nur brauche ich eben OwningClient und Server, ohne das eine oder das andere, funktioniert es nicht :(

    Auch der AnimBP holt sich entsprechend direkt die Variable (MyCharacter -> GetRotation).


    Lasse ich das OwningClient weg, dreht sich die Figur selber nicht, dafür im Multiplayer sichtbar für andere.
    Lasse ich den Server weg, dreht sich meine Figur, aber nicht im Multiplayer.

    Lasse ich beides weg (also nur Tick ->) dann ist beides alles falsch.
    Charaktere ruckeln, Köpfe ebenso (starren dabei nur in eine Richtung).
    Also komplett falsch.

    Das Reliable ist mir besonders wichtig für den Kopf + Rotation.


    Es ist so frustrierend das so etwas so fehlerhaft im Spiel ist.
  • Nu habe ich das doch nicht nach dem Video gemacht, aber wenn fragen aufkommen, warum ich diese Nodes genutzt habe, dann frag ruig.

    Bei meiner Variante würde ich auch gleich den Profies fragen, ob man bei solche Berechnungen cheaten kann. Ich weis dass man Variable mit einem Programm auslesen und verändern kann. Da diese Variable aber ständig sich verändert durch Berechnungen, weis ich nicht, ob es trotzdem möglich ist. Denn der Client Rechnet und der Server bekommt alles vom Client.
    Bilder
    • 2018-01-10 16_50_58-ThirdPerson_AnimBP_.jpg

      62,48 kB, 937×316, 7 mal angesehen
    • 2018-01-10 16_50_31-ThirdPerson_AnimBP_.jpg

      56,4 kB, 1.263×229, 6 mal angesehen
    • 2018-01-10 16_49_30-Event Graph.jpg

      325,88 kB, 1.904×979, 10 mal angesehen
Unreal®, Unreal Engine, the circle-U logo and the Powered by Unreal Engine logo are trademarks or registered trademarks of Epic Games, Inc. in the United States and elsewhere.