Unity3d 使刚体的大小统一为常数

Unity3d 使刚体的大小统一为常数,unity3d,game-physics,rigid-bodies,Unity3d,Game Physics,Rigid Bodies,我试图使刚体的大小保持在3.5的恒定速度。我不希望它比那个低或高 以下是我到目前为止在FixeUpdate()中所做的 if(rb.velocity.magnity>3.5f) { Debug.Log(“上述”); rb.velocity=Vector2.ClampMagnitude(rb.velocity,3.5f); } 如果(rb.速度.幅值

我试图使刚体的大小保持在3.5的恒定速度。我不希望它比那个低或高

以下是我到目前为止在FixeUpdate()中所做的

if(rb.velocity.magnity>3.5f)
{
Debug.Log(“上述”);
rb.velocity=Vector2.ClampMagnitude(rb.velocity,3.5f);
}
如果(rb.速度.幅值<3.5f)
{
Debug.Log(“以下”);
//不确定下面的计算是否正确
rb.velocity=rb.velocity.normalized*3.5f;
}
我知道我正确地实现了第一个
if
语句(如果超过3.5,则夹紧)。我已经在网上搜索过了,这是一些人建议的,当它超过期望的极限时,就要限制它的大小

但是,我不确定是否正确地实现了第二个
if
语句(如果幅值小于3.5)。我找不到任何与此相关的在线帖子/问题

我的问题是:如果刚体的速度低于期望的速度,那么设置刚体速度的正确方法是什么?我已经测试过,只有当值超过限制时,夹紧才起作用

顺便说一下,我想保持现在的方向。我只是想改变/提高速度。我不确定使用
规范化
是否正确


谢谢你的帮助。还是个物理/数学编程新手

你的计算是正确的

您也可以按照xyLe_uu在评论中的建议,只使用以下内容:

if(rb.velocity.sqrMagnitude != 3.5f*3.5f)
    rb.velocity = rb.velocity.normalized * 3.5f;
调用规范化有点费时(它需要一个平方根),但如果不运行此对象的数千个实例,您不会注意到任何问题(我假设
ClampMagnitude
函数无论如何都需要一个平方根,效率不会更高)


编辑:更正了“是”中有关注释的代码

仅使用最后一行代码是否足够
rb.velocity=rb.velocity.normalized*3.5f
。这只是将速度的大小设置为3.5,而不改变其大小direction@xyLe_是 啊我同意,那样更干净。(事实上,我没有注意到菜鸟的错误)感谢你的回答。我同意xyLe的建议更干净。我只有这个物体的一个实例,所以我想我很好。我有一个问题:规范化向量基本上就是向量的方向吗?还是我错了?谢谢,这是方向向量,大小为1。知道了!现在有道理了。谢谢代码中的小错误
rb.velocity
应该是
rb.velocity.magnity
。还有,为什么不在每一帧设置它呢?速度很可能在每一帧都会改变?此外,获取震级还需要一个平方根,您还可以根据3.5f(3.5f*3.5f)的平方检查sqrMagnitude。但可能是过早的优化。。。
if(rb.velocity.sqrMagnitude != 3.5f*3.5f)
    rb.velocity = rb.velocity.normalized * 3.5f;