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);
}
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);
}
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?
Mobile version