Rigidbody2D中的AddForce根本不起作用

时间:2019-04-27 10:33:33

标签: c# unity3d 2d

我一直在遵循指南,一直在数十个论坛中徘徊,随后,我一直在扯扯掉剩下的头发!

正如您在代码中看到的那样,我尝试使用速度进行运动,并使用AddForce进行跳跃运动。如果我使用速度,它会跳得最快并且最大,我只是不希望这种情况发生。我想要一个平滑的跳跃,更现实一些,所以我看到它说使用AddForce代替。除了...。它根本不起作用,他只是现在不跳……什么都没有。

我努力工作。该代码是 rb.velocity =跳跃* jumpForce;

就像我说的那样,这行得通,但是跳得非常快,而且看起来并不正确。

public class PlayerController : MonoBehaviour
{

    public float speed = 3.0f;
    public float jumpForce = 4.0f;
    public Rigidbody2D rb;
    public Vector2 movement;
    public bool isJumping;
    public Animator animate;
    public Vector2 jumping = new Vector2(0,1);


    // Start is called before the first frame update
    void Start()
    {
        rb = this.GetComponent<Rigidbody2D>();
        //animate = this.GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        //animate.SetFloat("Horizontal", Input.GetAxis("Horizontal"));

        movement = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));


    }
    void FixedUpdate()
    {

        moveCharacter(movement);
        jumpCharacter();


    }

    void moveCharacter(Vector2 direction)
    {
        rb.velocity = direction * speed;

    }

    void jumpCharacter()
    {
        if(Input.GetKey(KeyCode.Space) && !isJumping)
        {
            isJumping = true;

            rb.AddForce(jumping * jumpForce);
        }
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Ground"))
        {
            isJumping = false;
            rb.velocity = Vector2.zero;
        }
    }

}

2 个答案:

答案 0 :(得分:0)

您有Input.GetKey(KeyCode.Space)。将GetKey更改为GetKeyDown

如果您正在寻找GetKey,则在按住键时变量将始终为true。 GetKeyDown确保每次按下该键时代码都能运行一次。

答案 1 :(得分:0)

我遇到过和你一样的情况,我发现使用

  • Rigidbody2D.velocity =+ Vector2.up * force;FixedUpdate()
  • 代替 Rigidbody2D.AddForce(Vector2.up * force); 可以工作。

但我也想知道为什么 AddForce 不能正常工作。