是什么减慢了 RigidBody 的速度?

What is slowing down RigidBody?

我创建了一个非常简单的场景,其中只有一个 RigidBody。 我的全部代码如下:

extends RigidBody

func _ready():
    self.apply_central_impulse(Vector3(1, 0, 0))
    self.gravity_scale = 0
    self.linear_damp = 0
    self.friction = 0
    
func _integrate_forces(state):
    print("v", self.linear_velocity)

唯一发生的事情是开始时的单一力脉冲。

我当时预计会发生的是(在没有重力、阻尼和摩擦的情况下)它会保持恒定速度(因为没有其他力作用在它上面)。

然而我观察到的是 linear_velocity 不断变小。 IE。输出是:

--- Debugging process started ---
Godot Engine v3.4.4.stable.official.419e713a2 - https://godotengine.org
OpenGL ES 3.0 Renderer: NVIDIA GeForce RTX 2070 SUPER/PCIe/SSE2
OpenGL ES Batching: ON
 
v(1, 0, 0)
v(0.998333, 0, 0)
v(0.996669, 0, 0)
v(0.995008, 0, 0)
v(0.99335, 0, 0)
v(0.991694, 0, 0)
v(0.990042, 0, 0)
v(0.988392, 0, 0)
v(0.986744, 0, 0)
v(0.9851, 0, 0)

是什么导致我的 RigidBody 变慢?

P.S。这是从 Godot 问答 https://godotengine.org/qa/133003/what-is-slowing-down-rigidbody 交叉发布的,无论哪个地方先得到答案,我都会尽量记得更新另一个。

项目设置 -> 常规 -> 物理 -> 3D -> 默认线性阻尼中有线性阻尼配置。它正在应用于您的 RigidBody。如果将默认线性阻尼设置为零,减速效果就会消失。

这似乎也是 Bullet 和 GodotPhysics 之间的区别,因为切换到 GodotPhysics 也会使减速效果消失。

是的,这违反了文档,因为根据它,您必须将线性阻尼设置为 -1 才能获得默认阻尼。

因此,您可以认为这是一个错误,请随时在 https://github.com/godotengine/godot/issues 上打开错误报告 - 我已经看到了其他此类错误,其中 GodotPhysics 的工作方式与广告相同,但 Bullet(或其与 Godot 的集成) ) 有一些怪癖。

编辑:实际上,关于Bullet 和dampening 的bug 好像已经打开了: