- Home /
My character cant jump
Hey all, I've been following a simple platformer tutorial as my first project. After creating the script for movement I tried to adding the script to jump. I have no errors in my code when Unity checks the script but when I test my game the character dont jump. I already checked the axis name and the buttons assigned but everything is ok. Could somebody help me please? Here is my script:
public class PlayerController : MonoBehaviour {
//Movement variables
public float maxspeed;
//Jumping Variables
bool grounded = false;
float groundcheckradius = 0.2f;
public LayerMask groundlayer;
public Transform groundcheck;
public float Jumpheight;
Rigidbody2D mybody;
Animator myanim;
bool facingright;
// Use this for initialization
void Start () {
mybody = GetComponent<Rigidbody2D> ();
myanim = GetComponent<Animator> ();
facingright = true;
}
// Update is called once per frame
void update(){
if (grounded && Input.GetAxis ("Jump") > -10)
{
grounded = false;
myanim.SetBool ("Isgrounded", grounded);
mybody.AddForce (new Vector2 (0, Jumpheight));
}
}
void FixedUpdate () {
//Check if we are grounded if no we are falling
grounded = Physics2D.OverlapCircle(groundcheck.position,groundcheckradius,groundlayer);
myanim.SetBool("Isgrounded",grounded);
myanim.SetFloat("Verticalspeed",mybody.velocity.y);
float move = Input.GetAxis ("Horizontal");
myanim.SetFloat("Speed", Mathf.Abs(move));
mybody.velocity = new Vector2 (move * maxspeed, mybody.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;
}
}
Answer by Mmmpies · May 31, 2016 at 04:34 PM
You're telling it to jump by the force set in jumpheight but you don't set jumpheight! ;) Try...
public float jumpheight = 5f;
Answer by Alec-Slayden · May 31, 2016 at 11:38 PM
Assuming you are setting the jump height in the inspector:
You are using AddForce without specifying a force mode, which means it is using a basic force mode designed to be applied over time for acceleration effects. If you want instant movement such as for jumping and hits, which seems to be the case since the add force is only called once due to the character being no longer grounded, you will probably want to use ForceMode.Impulse (or for 2D, ForceMode2D.Impulse) as the forcemode parameter.
thus, line 30 would read:
mybody.AddForce (new Vector2 (0, Jumpheight), ForceMode2D.Impulse);