Jump Script Not Working
Hi, I'm new to unity and am currently having trouble getting my character to jump. I have a jump script in my player controller but when I click space to jump nothing happens. I have the jump action mapped to space in my Input Actions. Here is the code:
public class ThirdPersonScript : MonoBehaviour
{
public CharacterController controller;
public Transform cam;
public float speed = 6;
public float gravity = -9.81f;
public float jumpHeight = 3;
Vector3 velocity;
bool isGrounded;
public Transform groundCheck;
public float groundDistance = 0.4f;
public LayerMask groundMask;
float turnSmoothVelocity;
public float turnSmoothTime = 0.1f;
//Reference to InputActions script
private PlayerActionControls playerActionControls;
//Reference to animator component
private Animator animator;
//Called once at start
private void Awake()
{
playerActionControls = new PlayerActionControls();
animator = GetComponent<Animator>();
}
private void OnEnable()
{
playerActionControls.Enable();
}
private void OnDisable()
{
playerActionControls.Disable();
}
// Update is called once per frame
void Update()
{
Move();
Jump();
}
private void Jump()
{
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
if (isGrounded && velocity.y < 0)
{
velocity.y = -2f;
}
if (Input.GetButtonDown("Jump") && isGrounded)
{
velocity.y = Mathf.Sqrt(jumpHeight * -2 * gravity);
}
}
private void Move()
{
//gravity
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
//walk
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
//Read the movement value
Vector2 movementInput = playerActionControls.Player.Move.ReadValue<Vector2>();
//Move the player
Vector3 direction = new Vector3(horizontal, 0f, vertical).normalized;
if (direction.magnitude >= 0.1f)
{
float targetAngle = Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg + cam.eulerAngles.y;
float angle = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetAngle, ref turnSmoothVelocity, turnSmoothTime);
transform.rotation = Quaternion.Euler(0f, angle, 0f);
Vector3 moveDir = Quaternion.Euler(0f, targetAngle, 0f) * Vector3.forward;
controller.Move(moveDir.normalized * speed * Time.deltaTime);
}
//Setting "Run" bool in animator
if (Mathf.Approximately(movementInput.sqrMagnitude, 0) == false) animator.SetBool("Run", true);
else animator.SetBool("Run", false);
}
}
Thanks.
Answer by Blueshrimps · Mar 16 at 02:17 PM
There is a pretty simple fix to this problem. You made it so that your vertical velocity when jumping is right before the vertical velocity is decreased by your gravity. Set your gravity to your jump height, and then the gravity will move you up before moving you back down.
Thanks for the response. I'm not too sure what you mean by setting my gravity to my jump height could you clarify?
Your answer
Follow this Question
Related Questions
My Player Character Have Infinite Jumping + ArgumentException Error 1 Answer
Jump, if I touch button,Jump if I pres the touch button 0 Answers
Unity 2D Enemy jump Question (Frog jump) 1 Answer
Making an object jump (without rigidbodies), while using enum + gravity 0 Answers
Need help with Character Jump! 0 Answers