2
\$\begingroup\$

I'm working on a basic movement system for the player in a 3D Box platformer and for a month I've been having problems with the double jump system. The one bug that I still can't figure out is whenever I press the jump button, it has a force that is also pushing the box to the negative direction of the x-axis.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public Rigidbody rb;

    [SerializeField] private float force;
    [SerializeField] public float jumpForce;

    float doubleJumpCount = 0;

    bool doubleJump;

    bool jump;
    bool forward;
    bool backwards;
    bool left;
    bool right;

    private void OnCollisionEnter(Collision collision)
    {
        if(collision.collider.name == "Floor")
        {
            doubleJumpCount = 0;
        }
    }

    // Update is called once per frame
    void Update()
    {
        jump = Input.GetButtonDown("Jump");
        left = Input.GetButton("Left");
        right = Input.GetButton("Right");
        forward = Input.GetButton("Up");
        backwards = Input.GetButton("Down");

        if(jump)
        {
            Debug.Log("doubleJumpCount = " + doubleJumpCount);
        }
    }

    void FixedUpdate()
    {
        if(right) rb.AddForce(Vector3.right * force * Time.deltaTime);
        if(left) rb.AddForce(Vector3.left * force * Time.deltaTime);
        if (forward) rb.AddForce(Vector3.forward * force * Time.deltaTime);
        if (backwards) rb.AddForce(Vector3.back * force * Time.deltaTime);

        if (jump)
        {
            Jump();
        }
    }

    void Jump()
    {
        if(doubleJumpCount >= 2)
        {
            return;
        }
        else
        {
            rb.velocity = Vector3.zero;
            rb.AddForce(Vector3.up * jumpForce * Time.deltaTime);
            doubleJumpCount++;
        }
    }
}

I have a suspicion that it might have something to do with the settings i have set for the jump button in the project settings. Or maybe should I use the transform class instead of using a RigidBody3D class to manipulate movement?Jump button settings in the project settings window

A rough sketch of the game I'm aiming for

\$\endgroup\$
0

1 Answer 1

1
\$\begingroup\$

The center of mass of your rigidbody might be messed up, resulting in unexpected behavior when applying a force to it.

Try setting the velocity of the rigidbody instead of adding a force when jumping:

void Jump()
{
    if(doubleJumpCount >= 2)
        return;
    else
    {
        rb.velocity = Vector3.up * jumpForce;
        doubleJumpCount++;
    }
}

Hope this helps!

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .