How do you rotate a rigidbody while maintaining world-coordinate velocity?
I currently have a player object that can run around and jump. My current issue is that when I jump and quickly rotate, my velocity rotates as well. So if I am running forwards, then jump and turn, I am still moving forwards relative to the character after turning.
I am trying to make it so that the player maintains their world-space velocity, so that if they are moving forwards and then turn around, they continue traveling backwards.
My player object has a rigidbody component that is getting all of the force and rotations.
Rotation code snippet
void Update()
{
horizontalTurn = Input.GetAxis("Mouse X") * mouseSensitivity.x;
}
void FixedUpdate () {
Turn();
}
void Turn()
{
rigidbody.transform.Rotate(Vector3.up, horizontalTurn);
}
Movement code snippet
void Update ()
{
if (Input.GetButtonDown("Jump"))
{
tryToJumpInFixedUpdate = true;
}
var horizonalAxis = Input.GetAxis("Horizontal");
var verticalAxis = Input.GetAxis("Vertical");
intentedMovementFromInput = new Vector3(horizonalAxis, 0, verticalAxis);
}
void FixedUpdate()
{
if (tryToJumpInFixedUpdate)
{
if (IsGrounded())
{
Jump();
}
tryToJumpInFixedUpdate = false;
}
Move();
}
void Jump()
{
rigidbody.velocity += new Vector3(0, jumpForce, 0);
}
void Move()
{
var intentedMovement = intentedMovementFromInput * moveSpeed;
rigidbody.AddRelativeForce(intentedMovement);
}
How should I be going about getting around this? Is this more of an object structure issue, or should I be looking at something specific code-wise?
Your answer
Follow this Question
Related Questions
How to determine one point (Vector3) based on 7 other points (Vector3's) with 2 coordinate systems? 1 Answer
Rotate LOCAL y axis to match Joystick input 0 Answers
Help with raycast for for wall detection 1 Answer
Why does my Pong paddle code work? 1 Answer
How do I find the rotation of a game object in relation to its grandparent 1 Answer