在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
的评论的代码
我正在尝试将刚体的大小保持在 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
的评论的代码