Jugap
Jugap

Reputation: 35

When I want my Player to jump he is flying (Unity2d)

Hello I want to make my first game in 2D but when i want to Jump, my Player is flying and he doesnt come back to the ground. I don't know why it doesnt work. Hopefully someone can help me. Thank you. Here is my Code:

using UnityEngine;
using System.Collections;
public class Move2D : MonoBehaviour
{
    public float speed = 5f;
    public float jumpSpeed = 8f;
    private float movement = 0f;
    private Rigidbody2D rigidBody;
    // Use this for initialization
    void Start()
    {
        rigidBody = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        movement = Input.GetAxis("Horizontal");
        if (movement > 0f)
        {
            rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);
        }
        else if (movement < 0f)
        {
            rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);
        }
        else
        {
            rigidBody.velocity = new Vector2(0, rigidBody.velocity.y);
        }
        if (Input.GetButtonDown("Jump"))
        {
            rigidBody.velocity = new Vector2(rigidBody.velocity.x, jumpSpeed);
        }
    }
}

Upvotes: 2

Views: 129

Answers (1)

Daniel Koch
Daniel Koch

Reputation: 169

You set the y velocity on jump but never set it back to anything else. I suggest that for jump you use rigidBody.AddForce:

rigidBody.AddForce(transform.up * jumpSpeed, ForceMode2D.Impulse);

I also have to say that your first if..else if...else seems to be redundant.

If movement > 0, you do X, is movement is < 0, you do exactly the same, and if movement == 0, you still do the same even tho you write it differently. (If movement == 0 then movement * speed is also 0). So you could just state that

rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);

without using if at all.

edit: I accidentally wrote wrong line for what to use, fixed it now.

edit2: So after both of these changes your Update function would be like:

void Update()
{
    movement = Input.GetAxis("Horizontal");
    rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);

    if (Input.GetButtonDown("Jump"))
    {
        rigidBody.AddForce(transform.up * jumpSpeed, ForceMode2D.Impulse);
    }
}

Upvotes: 3

Related Questions