繁体   English   中英

Unity Engine: 2D Rigid body 添加运动后下落缓慢?

[英]Unity Engine: 2D Rigid body is falling slowly after adding movement?

我试图将简单的运动放入一个项目中,但由于某种原因,这导致它所应用的对象下落速度极慢。 我正在使用较新的输入系统,但我以前并没有真正使用过它,所以我不确定这是否是一个错误。

到目前为止,该运动正在按预期进行。 重力在设置中是默认的。

public class Movement : MonoBehaviour
{
    public Rigidbody2D rb;

    public float moveSpeed = 4f;
    public InputAction playerControl;

    Vector2 moveDirection = Vector2.zero;

    private void OnEnable()
    {
        playerControl.Enable();
    }
    private void OnDisable()
    {
        playerControl.Disable();
    }

    // Update is called once per frame
    void Update()
    {
        

        moveDirection = playerControl.ReadValue<Vector2>();
    }

    private void FixedUpdate()
    {
        rb.velocity = new Vector2(moveDirection.x * moveSpeed, moveDirection.y * moveSpeed);
    }
}

到目前为止,这就是我应用于播放器对象的内容。 实际移动时没有问题,但坠落无法正常工作

在 FixedUpdate 中,您设置 RigidBody 的速度,包括 y 分量。 这与重力相互作用不佳。

重力降低 RigidBody2D 的垂直速度,使物体下落。 同时,您的代码每帧都会擦除这些更改,这意味着它无法向下加速,从而导致它以非常缓慢且恒定的速度下降(而不是像预期的那样加速向下)。

如果你可以完全控制你的垂直运动,重力将如何运作? 如果玩家无法控制他们的垂直运动,请将此行更改为:

rb.velocity = new Vector2(moveDirection.x * moveSpeed, rb.velocity.y);

这将解决问题,但会删除您的垂直控件。 这是你想要的吗?

如果你想保持垂直运动但不覆盖重力,你必须做出某种妥协。 如果您希望重力在您不控制角色的垂直运动时起作用,您可以这样做:

if (moveDirection.y > 0.001)
{
rb.velocity = new Vector2(moveDirection.x * moveSpeed, moveDirection.y * moveSpeed);
}
else
{
rb.velocity = new Vector2(moveDirection.x * moveSpeed, rb.velocity.y);
}

您还可以将垂直运动添加到垂直速度。 这将意味着玩家无法像水平速度那样完全控制垂直速度,而是能够对其施加力。

rb.velocity = new Vector2(moveDirection.x * moveSpeed, rb.y + moveDirection.y * verticalMoveSpeed);

暂无
暂无

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

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