- Home /
Why can't my character jump
if anyone can tell me why my code won't work, plz do... im following a tutorial by CasanisPlays on episode 7 and my code is the exact same as his yet my character will not jump. here is the code
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class playercontroller : MonoBehaviour {
//movement variables
public float maxSpeed;
//jumping variables
bool grounded = false;
float groundCheckRadius = 0.5f;
public LayerMask groundLayer;
public Transform groundCheck;
public float jumpHeight;
Rigidbody2D myRB;
Animator myAnim;
bool facingRight;
// Use this for initialization
void Start () {
myRB = GetComponent<Rigidbody2D>();
myAnim = GetComponent<Animator>();
facingRight = true;
}
// Update is called once per frame
void update()
{
if (grounded && Input.GetAxis("Jump") > 0)
{
grounded = false;
myAnim.SetBool("isGrounded",grounded);
myRB.AddForce(new Vector2(0,jumpHeight));
}
}
void FixedUpdate () {
//check if we are grounded - if no, then we are falling
grounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer);
myAnim.SetBool("isGrounded", grounded);
myAnim.SetFloat("verticalSpeed", myRB.velocity.y);
float move = Input.GetAxis("Horizontal");
myAnim.SetFloat("speed", Mathf.Abs(move));
myRB.velocity = new Vector2(move * maxSpeed, myRB.velocity.y);
if (move > 0 && !facingRight)
{
flip();
} else if (move < 0 && facingRight)
{
flip();
}
}
void flip()
{
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
I have tried everything. my character has a jump force and the animations all work but nothing happens when i press W or Up
Only thing I see that might make a difference or might not....is
Input.GetAxis("Jump")
not sure if Jump has an axis...I think you want
Input.GetAxis("Vertical")
Are you sure this is getting the right result? Try debugging the value.
grounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer);
maybe groundCheckRadius is too small?
Answer by AbandonedCrypt · Feb 09, 2021 at 01:48 PM
Change your line
if (grounded && Input.GetAxis("Jump") > 0)
to
if (grounded && Input.GetKey(KeyCode.Space))
to jump using space bar. Since you did not specify anything about how you want to jump and you say GetAxis("Vertical") did not help you, I just assume u want to use space.
Also check the value of your grounded variable with Debug.Log(), because if that doesn't work properly, your jump can't work anyways.
Also you should control your jump like this: Create a bool (something like doJump). In Update() check for Jump input (like you did) and then set doJump true. In FixedUpdate check if(doJump) and put your jump logic in there, don't forget to set doJump to false. That way you can check for Jump input in Update() but your jump is still executed in FixedUpdate() like it should.
Answer by BartHeq · Mar 14, 2017 at 09:36 AM
@GarberGames , just as @SnStarr said, the problem might be with Jump axis. In Unity editor, go to Edit -> Project Settings -> Input. There you can see your axes and buttons assigned to them. In my case, default button for "Jump" is space. So maybe you are pressing wrong button, because W and Up are buttons for "Vertical" Axis. If you want to jump with W or Up, change your 27th line of code: change "Jump" to "Vertical".
Also, jumping code should be in FixedUpdate(), not Update(), because it uses physics.