- Home /
The question is answered, right answer was accepted
Character wont stop jumping in the air
My character is able to jump in the air... infinitely. How can I solve this? Here is my code:
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public CharacterController controller;
public float speed = 12f;
public float gravity = -9.81f;
public float jumpHeight = 3f;
public Transform groundCheck;
public float groundDistance = 0.4f;
public LayerMask groundMask;
Vector3 velocity;
bool isGrounded;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
if(isGrounded && velocity.y < 0){
velocity.y = -2f;
}
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
Vector3 move = transform.right * x + transform.forward * z;
controller.Move(move * speed * Time.deltaTime);
if(Input.GetButtonDown("Jump") && isGrounded){
velocity.y = Mathf.Sqrt(jumpHeight * -2 * gravity);
}
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
}
} |
Answer by ArjhanToteck · Feb 05, 2021 at 07:30 PM
You could keep track of when its on the ground. Using oncollisionenter and exit would be more efficient than Physics.CheckSphere if you add a collider to the player.
void OnCollisionEnter(collision collision){
if(collision.gameObject.name = "ground") // could also be replaced with collision.gameObject.tag
{
isGrounded = true;
}
}
I did it differently (by using controller.isGrounded) but that worked too, thanks!
Follow this Question
Related Questions
How do i stop infinite Jumping in the air 1 Answer
Character can jump mid air forever 3 Answers
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
can anyone help me to smooth the jump? 0 Answers