AddForce funktioniert nicht

  • Kann bitte jemand zeigen oder sagen wie man die AddForce Funktion richtig benutzt?


    Ich habe ein Actor das sich durch die Force in Bewegung setzten sollte. Tut es aber nicht. Stattdessen funktioniert die AddImpulse Funktion wie erwartet.
    Wenn ich es genau so mit AddForce mache passiert nichts.

  • Add Force muss in jedem Frame augerufen werden, in dem die Kraft wirkt.
    Ist auch logisch da eine Kraft nur eine Beschleunigungsänderung verursacht. (F = m*a)
    Tust du dies nur einmal ist diese Beschleunigungsänderung nur minimal und dazu noch sehr kurz (1 Frame) da greift dann die Reibung so schnell, dass man nichts davon mitbekommt. Benutzen sollte man sie wenn man länger anhaltende Kräfte simulieren will. Ein Kraftfeld z.B. was eine Anziehungs oder Abstoßungskraft auswirkt oder ein Jetpack der kontinuierlich für eine Kraft nach oben sorgt.


    Impulse sorgen für eine Geschwindigkeitsänderung. (I = m*v)
    Daher muss man die eher nur in einem einzelnen Tick aufrufen. Oft handelt es sich ja auch um stoßartige belastungen.


    Im Grunde macht AddForce(Kraft) nur AddImpulse(Kraft * deltaTime). Du kannst also auch im Tick einfach AddImpulse benutzen. AddForce ist nur dazu da im es den Leuten einfacher zu machen die diesen zusammenhang zwischen Kraft und Impuls nicht kennen.


    BTW für Gameplay Programming ist es meiner Meinung nach recht ratsam sich einmal leicht mit Dynamik (aus der Festkörpermechanik) auseinander setzt. Da man heutzutage immer mal wieder paar physik (mechanik) basierte Probleme oder Features auftrifft ist das Wissen daraus recht praktisch.

  • Danke! Das hat mir weiter geholfen. Wobei das am Anfang etwas verwirrend wirkt. Soweit ich auch an anderer Stelle gelesen habe, ist die AddForce Funktion unabhängig von der Framerate, wegen der internen Multiplikation mit deltaTime.


    Ich versuche das newtonsche Gravitationsgesetz zu simulieren. Ist eigentlich eine einfache Formel, aber ich lerne gleichzeitig den Umgang mit Blueprints.
    Ich bin auch schon soweit das ich Schwerkraft simulieren kann. Ich habe eine Gravity Klasse, die bewirkt das sich Objekte gegenseitig anziehen, über AddForce/AddImpuls.
    Verpasst man einem Objekt einen Anfangs Impuls, entstehen Orbits um die schweren bzw. starren Objekte.


    Noch ist die Formel aber nicht richtig implementiert, ich glaube deswegen kriege ich noch keine Abstimmung so hin dass eine stabile Orbit entsteht.


    Ich bin auch auf Probleme gestoßen die schon im Bug Report enthalten sind: Wenn man eine Blueprint Klasse erstellt und dem ganzen eine Mesh gibt und man möchte das die Physik Masse von diesem Mesh bei jeder Instanz im Editor editierbar ist, geht das nicht! Es fehlen dafür die Blueprint Set Methoden, sowohl für mass als auch für den Density Wert von Physical Materials.
    Ich muss also wohl warten bis das gelöst ist oder ich füge die Set Methoden selbst in C++ hinzu, was möglich sein soll.