I’ve tried everrything to make the character fall down right after a jump, but if I just jump everything works fine, but if I jump and then move, my character keeps floating and fall down extremely slow
Here’s my code for the controller:
public class ThirdPersonController : MonoBehaviour
{
private Inputs _input;
private Vector3 PlayerMovementInput;
private float turnSmoothTime = 0.1f;
private float turnSmoothVelocity;
[SerializeField] private Rigidbody PlayerBody;
[Space]
[SerializeField] private float Speed;
[SerializeField] private float JumpForce;
[SerializeField] private Transform cam;
[SerializeField] private Transform FeetPosition;
public bool Grounded = true;
public LayerMask GroundLayers;
// Start is called before the first frame update
void Start()
{
_input = GetComponent<Inputs>();
}
// Update is called once per frame
void FixedUpdate()
{
PlayerMovementInput = new Vector3(_input.move.x, 0f, _input.move.y);
IsGrounded();
MovePlayer();
}
private void MovePlayer()
{
if (Input.GetKeyDown(KeyCode.Space) && Grounded)
{
PlayerBody.AddForce(Vector3.up * JumpForce, ForceMode.Impulse);
}
Vector3 direction = new Vector3(PlayerMovementInput.x, 0f, PlayerMovementInput.z).normalized;
if (direction.magnitude >= 0.1f)
{
float targetAngle = Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg + cam.eulerAngles.y;
float angle = Mathf.SmoothDampAngle(PlayerBody.transform.eulerAngles.y, targetAngle, ref turnSmoothVelocity, turnSmoothTime);
PlayerBody.transform.rotation = Quaternion.Euler(0f, angle, 0f);
Vector3 moveDir = Quaternion.Euler(0f, targetAngle, 0f) * Vector3.forward;
PlayerBody.velocity = moveDir * Speed;
}
}
private void IsGrounded()
{
Grounded = Physics.CheckSphere(FeetPosition.position,0.1f,GroundLayers);
}
}