- Home /
Character Controller velocity match separate forward/backwards and left/right move speeds?
I'm using Unity's character controller for moving my player, and I'm adding the vertical input to a Speed variable for forwards/backwards movement and adding the horizontal input to a Strafe variable for the left/right movement. These are then put into a vector3 that goes to charactercontroller.Move() to make the player move.
I need to make sure that when CharacterController performs it's colision detection, my Speed and Strafe variables match the read-only CharacterController.velocity value.
If I get the magnitude of CharacterController.velocity, it almost matches my Speed variable (to 4 decimal points) which is close enough, but this only works if I'm using vertical input, otherwise my Strafe speed is factored in and now the magnitude of CharacterController.velocity returns Speed + Strafe.
Further more, the magnitude of CharacterController.velocity is absolute, so I need to work out if the player is moving backwards or forwards, or left or right.
Combining the charactercontroller.velocity.x and charactercontroller.velocity.z magnitude according to https://docs.unity3d.com/ScriptReference/CharacterController-velocity.html allows you to get the forwards speed, I'm not 100% certain if this is including my strafing speed, but I can't figure out at all how to separate the forward speed from the side-to-side speed to match my variables to character controller's internal velocity speeds?
I'm not entirely sure how I should be comparing my two movement speed variables to the single CharacterController.velocity vector and somehow matching my two speed variables to it?