繁体   English   中英

当我希望我的玩家跳跃时,他正在飞行(Unity2d)

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

您好,我想制作我的第一个 2D 游戏,但是当我想跳跃时,我的 Player 正在飞行并且他没有回到地面。 我不知道为什么它不起作用。 希望有人可以帮助我。 谢谢你。 这是我的代码:

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);
        }
    }
}

您在跳跃时设置了 y 速度,但从不将其设置回其他任何值。 我建议你使用rigidBody.AddForce进行跳跃:

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

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

如果运动> 0,你做X,运动是< 0,你做的完全一样,如果运动== 0,即使你写得不同,你仍然做同样的事情。 (如果运动 == 0 则运动 * 速度也是 0)。 所以你可以只是 state

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

根本不使用 if 。

编辑:我不小心写错了要使用的行,现在修复它。

编辑2:因此,在这两项更改之后,您的更新 function 将如下所示:

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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM