Unity 2D脚本摩擦方程

时间:2017-12-16 01:07:51

标签: c# unity3d unity5

我正在研究方形物体的摩擦力,因为它是由玩家推动的。块的运动完全通过脚本使用transform进行控制。每个帧都有一个(速度)翻译,只有一个boxcollider2D。我推测,因为我手动控制块的移动每个帧是我无法使boxcolliders2D的物理材料2D摩擦起作用的原因。

基本上,我试图通过使用transform.translate重新创建类似于刚体的内置物理,或者如果可能的话使用内置物理。到目前为止,我已经登陆了这样的事情

newVelocity.x -= ( 1 / (newVelocity.x * newVelocity.x)); 试图降低每帧的速度。直到它达到0并短路。显然,当velocity.x变为十进制数时,这会分崩离析。我很难接受我应该做的事情,以达到类似于刚体的摩擦力,在刚刚开始减速的情况下,它会在停止时减速到最后。任何和所有的帮助表示感谢,提前谢谢!

1 个答案:

答案 0 :(得分:3)

您可以在计算速度变化之前和之后比较速度的符号,并在符号发生变化时将速度设置为零,如下所示:

newVelocity.x -= ( 1 / (newVelocity.x * newVelocity.x));
if(Mathf.Sign(previousVelocity.x) != Mathf.Sign(newVelocity.x)) {
    newVelocity.x = 0f;
}

但有一点是,使用上面的等式不计算正常摩擦,计算如下:

newVelocity.x -= frictionCoefficient*Time.fixedDeltaTime;

有了这个,你就不需要将速度与之前的速度进行比较,因为你可以说速度是否低,它是零。如果你愿意,你仍然可以比较之前的速度符号,但这可能更有效

if(newVelocity.x < 0.01f) {
    newVelocty.x = 0f;
}