当我想让我的玩家跳跃时,他就会飞起来(Unity2d)

问题描述 投票:0回答:1

你好,我想做我的第一个游戏在2D,但当我想跳,我的球员是飞,他不回来的地面。我不知道为什么它不工作。希望有人能帮助我。谢谢你的帮助。这是我的代码。

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);
        }
    }
}
c# unity3d
1个回答
3
投票

你在跳跃时设置了Y速度,但从未将其设置为其他的速度。我建议你在跳跃时使用 rigidBody.AddForce:

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

我还得说,你的第一个if...else if...else似乎是多余的。

如果movement > 0,你做X,如果movement是< 0,你做的完全一样,如果movement == 0,你做的还是一样,即使你写的不一样。(如果movement ==0,那么movement * speed也是0)。所以你可以直接写成

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

根本不用if。

edit: 我不小心写错了一行字,现在修正了。

edit2: 所以在做了这两处改动之后,你的Update函数就会变成这样。

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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.