So begrenzen Sie die Geschwindigkeit in Unity 3D mithilfe von AddForce mit ForceMode.VelocityChangeC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 So begrenzen Sie die Geschwindigkeit in Unity 3D mithilfe von AddForce mit ForceMode.VelocityChange

Post by Anonymous »

Ich arbeite an einem Player-Controller und habe Probleme mit der Begrenzung der Geschwindigkeit des Charakters. Der Charakter scheint auf unbestimmte Zeit zu beschleunigen.
Ich aktualisiere die Geschwindigkeit des Charakters mit rb.AddForce(movement * MovementSpeed, ForceMode.VelocityChange), wobei Bewegung ein normalisierter Vektor3 ist (mit Werten nur für x und z) und BewegungSpeed ein öffentlicher Gleitkommawert ist, der die gewünschte Bewegungsgeschwindigkeit angibt. Mir ist klar, dass es trivial wäre, die Geschwindigkeit des Charakters durch direktes Festlegen zu begrenzen, aber ich habe den Eindruck, dass das direkte Festlegen von rb.velocity eine schlechte Praxis ist (was meiner Meinung nach nicht ganz sicher ist).
Meine feste Aktualisierungsfunktion:

Code: Select all

private void FixedUpdate()
{
Vector3 movement = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical"));
movement.Normalize();
rb.AddForce(movement * movementForce, ForceMode.VelocityChange);
}
Ich habe versucht, eine bedingte Anweisung hinzuzufügen, die prüft, ob die Geschwindigkeit größer als das gewünschte Maximum ist, und, wenn dies zutrifft, eine Kraft in die entgegengesetzte Richtung hinzuzufügen. Dies führt zu Stottern. Die Geschwindigkeit des Charakters wird auf 0 zurückgesetzt und er muss erneut beschleunigen.

Code: Select all

    Vector3 currMovement = new Vector3(rb.velocity.x, 0f, rb.velocity.z);
float currMagnitude = currMovement.magnitude;
if (currMagnitude > movementSpeed) {
rb.AddForce(currMovement * (-1 * movementSpeed / currMagnitude), ForceMode.VelocityChange);
}
Jede Hilfe wäre sehr dankbar?
TL;DR
  • Wie begrenze ich die Geschwindigkeit bei Verwendung von rb.AddForce(movement, ForceMode.VelocityChange)?
  • Muss ich überhaupt rb.AddForce verwenden oder kann ich es direkt festlegen rb.velocity?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post