Unity 2D脚本摩擦方程
Unity 2D scripted friction equation
我正在研究一个方形物体在被玩家推动后的摩擦力。块的运动完全通过脚本控制,每帧使用 transform.Translate(velocity) 并且仅使用 boxcollider2D。我推测因为我手动控制每个帧的块运动是我似乎无法让 boxcolliders2D 的物理 material 2D 摩擦起作用的原因。
基本上,我正在尝试使用 transform.translate 重新创建类似于刚体的内置物理,或者如果可能的话使用内置物理。到目前为止,我已经找到了这样的东西
newVelocity.x -= ( 1 / (newVelocity.x * newVelocity.x));
试图减少每帧的 velocity.x 直到它达到 0 并短路。显然,当 velocity.x 变成十进制数时,这就分崩离析了。我对我应该做些什么来实现类似于刚体的摩擦感到困惑,刚体刚开始时它会减慢一点,然后在停止时快得多。任何和所有帮助表示感谢,提前致谢!
你可以比较计算速度变化前后的速度符号,当符号改变时将速度设置为零,如:
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;
}
我正在研究一个方形物体在被玩家推动后的摩擦力。块的运动完全通过脚本控制,每帧使用 transform.Translate(velocity) 并且仅使用 boxcollider2D。我推测因为我手动控制每个帧的块运动是我似乎无法让 boxcolliders2D 的物理 material 2D 摩擦起作用的原因。
基本上,我正在尝试使用 transform.translate 重新创建类似于刚体的内置物理,或者如果可能的话使用内置物理。到目前为止,我已经找到了这样的东西
newVelocity.x -= ( 1 / (newVelocity.x * newVelocity.x));
试图减少每帧的 velocity.x 直到它达到 0 并短路。显然,当 velocity.x 变成十进制数时,这就分崩离析了。我对我应该做些什么来实现类似于刚体的摩擦感到困惑,刚体刚开始时它会减慢一点,然后在停止时快得多。任何和所有帮助表示感谢,提前致谢!
你可以比较计算速度变化前后的速度符号,当符号改变时将速度设置为零,如:
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;
}