Need help on adding gravity to my player movement

I don’t really know how to add proper gravity and jumping to my Player

My Update method is at the bottom of this post. moveLeftRight and moveForwardBack are simply the magnitudes of the movement. They are dependent on WASD. The Move function is basically this magnitude given from WASD and multiplied to the forward and right vectors of the Player transform. My player transform correctly aligns it’s forward (z-axis) vector with with I point my mouse

I just have two issues.

The first issue is that when my mouse looks up, then the transform.forward vector gains a y component. If I hold W, there is a “fight” between the negative y and the positive forward vector’s y component. If gravity isn’t strong enough, then my Player will start flying. Similar effect when I look down and hold D

My second issue is that my jump isn’t smooth, rather my Player gets “teleported” to the jump height

Thank you

void Update()
{
    Vector3 move;
    float moveLeftRight = Input.GetAxis("Horizontal")*Time.deltaTime*movementSpeed;
    float moveForwardBack = Input.GetAxis("Vertical")*Time.deltaTime*movementSpeed;
    
    //new Vector3(0,-2,0) is simulating gravity by keeping the character controller to the ground
    move = transform.right*moveLeftRight + transform.forward*moveForwardBack + new Vector3(0,-2,0);
    characterController.Move(move);
}
1 Like

If the problem is with the non-zero y component of transform.forward, then you could zero this out before using it in the move vector.

Vector3 forwardDirection= transform.forward;
forwardDirection.y = 0;
forwardDirection.Normalize();

Vector3 righDirection = transform.right;
rightDirection.y = 0;
rightDirection.Normalize();

move = rightDirection*moveLeftRight + forwardDirection*moveForwardBack;
characterController.Move(move);