【问题标题】:Rigidbody2D: How do I prevent the Y axis from being overwritten with 0?Rigidbody2D:如何防止 Y 轴被 0 覆盖?
【发布时间】:2021-10-21 14:36:31
【问题描述】:
public void MoveCharacter(float directionHori) //either -1 or 1
{      
    direction = new Vector2 (directionHori, 0); //new vector2 using passed x value (1 or -1). //BUG - passing in 0 as Y axis overrides gravity while player is moving.

    rb.MovePosition(rb.position + direction * moveSpeed * Time.fixedDeltaTime); //apply movement 
}

上面是我的 MoveCharacter 方法,当它被调用时,Y 轴被 0 覆盖,因此重力被禁用,允许玩家在应该跌倒时飞行。这是一个 2D 横向卷轴,因此玩家不应该能够垂直移动(当然下降时除外)。我试过 direction = new Vector2 (directionHori, rb.Velocity.y); //用rb.Velocity替换0

然而,这会产生更奇怪的行为。任何帮助将不胜感激,我还是 Unity 的新手!非常感谢。

【问题讨论】:

    标签: c# unity3d velocity gravity


    【解决方案1】:

    与其使用MovePosition,您需要自己计算最终位置,不如简单地调整velocity 之类的

    var velocity = rb.velocity;
    velocity.x = direction * moveSpeed;
    rb.velocity = velocity;
    

    这样可以保持重力和垂直运动不变,Rigidbody2D / 物理引擎会为您进行计算;)

    【讨论】:

    • 非常感谢!真的很感激。
    猜你喜欢
    • 2021-12-18
    • 2017-12-19
    • 2021-02-08
    • 2020-07-23
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多