void Update()
{
wasGrounded = characterController.isGrounded;
ProcessPlayerInput(); // check input
GroundCheck(); // check ground status
JumpCheck(); // jump
Move(); // finally move
}
private void Move()
{
ApplyGravity();
GetDesiredMovementSpeed();
finalVector =
(groundVector * finalSpeed) +
(Vector3.up * gravitySim); // we combine our velocities/vectors
if (jump.magnitude > playerSettings.jumpMagn)
{
finalVector += jump;
}
characterController.Move(finalVector * Time.deltaTime); // pass in our vectors
jump = Vector3.Lerp(jump, Vector3.zero, playerSettings.jumpSmoothing * Time.deltaTime); // dampen the jump vector towards 0
// incorrect lerp function, btw ^
}
private void ApplyGravity()
{
if (characterController.isGrounded && gravitySim < playerSettings.gravity)
gravitySim = playerSettings.gravity;
gravitySim += playerSettings.gravity * Time.deltaTime;
}
private void JumpCheck()
{
if (Input.GetKeyDown(KeyCode.Space) && jumpCounter > 0)
{
ResetVerticalVelocity();
var calculatedJumpModifier = 1f;
if (isRunning)
calculatedJumpModifier = runningJumpModifier;
jump += Vector3.up.normalized * (playerSettings.jumpForce * calculatedJumpModifier) / playerSettings.mass;
jumpCounter--;
audioSource.PlayOneShot(jumpSound);
}
}
public void ResetVerticalVelocity()
{
jump.y = 0f;
gravitySim = 0f;
}