在Unity中使刚体大小恒定

Making rigidbody magnitude constant in Unity

我正在尝试将刚体的大小保持在 3.5 的恒定速度下。我不希望它比这更低或更高。

这是我到目前为止在 FixedUpdate()

中所做的
        if(rb.velocity.magnitude > 3.5f)
        {
            Debug.Log("ABOVE");
            rb.velocity = Vector2.ClampMagnitude(rb.velocity, 3.5f);
        }
        if(rb.velocity.magnitude < 3.5f)
        {
            Debug.Log("BELOW");
            // Not sure if calculation below is correct
            rb.velocity = rb.velocity.normalized * 3.5f;
        }

我知道我正确地实现了第一个 if 语句(如果超过 3.5 则钳制)。我在网上搜索了一下,这就是一些人在限制幅度超过所需限制时的建议。

但是,我不确定我是否正确执行了第二个 if 语句(如果震级低于 3.5)。我在网上找不到任何关于此的 posts/questions。

我的问题是:如果刚体速度低于所需速度,设置刚体速度的正确方法是什么?我已经测试过只有当值超过限制时钳位才有效。

顺便说一句,我想保持目前的方向。我只想change/increase的速度。我不确定使用 normalized 是否正确。

感谢任何帮助。仍然是 physics/math 编程的新手。

你的计算是正确的。

您也可以执行 xyLe_ 在评论中建议的操作,并仅使用它:

if(rb.velocity.sqrMagnitude != 3.5f*3.5f)
    rb.velocity = rb.velocity.normalized * 3.5f;

调用规范化有点耗时(它需要一个平方根)但是如果你不 运行 这个对象的数千个实例(我想ClampMagnitude 函数无论如何都需要平方根,效率不会更高)

编辑: 更正了有关来自 yes

的评论的代码