c# - 当我希望我的玩家跳跃时,他正在飞翔(Unity2d)

标签 c# unity-game-engine

您好,我想制作我的第一个 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);
        }
    }
}

最佳答案

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

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

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

如果移动 > 0,你做 X,如果移动 < 0,你做完全相同的事情,并且 如果 move == 0,即使你写得不同,你仍然会做同样的事情。 (如果运动 == 0,则运动 * 速度也为 0)。所以你可以直接声明

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

根本不使用 if 。

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

edit2:因此,在这两项更改之后,您的更新函数将如下所示:

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

关于c# - 当我希望我的玩家跳跃时,他正在飞翔(Unity2d),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62406957/

相关文章:

c# - 无法设置 Microsoft POS C# CharacterSet 属性。

c# - 在 Excel 工作表中插入数据时 Insert into 语句中出现语法错误

c# - 将 google play 游戏服务插件导入 Unity 时出错

for-loop - 在unityscript中的for循环中停止一个代码

c# - PUN OnPlayerPropertiesChanged 和对象启用

c# - 有没有一种方法可以将游戏对象放置在网格图案中(类似于图 block map )?

c# - 如何获取驱动器号和名称(卷标)

C# 尝试从类型列表中转换字符串

c# - 是否可以在 C# 程序中使用 C++ .lib 文件?

user-interface - 从 Unity 中的 MultiFloatField 检索值