我正在 Godot 中制作一个类似于人类一败涂地的主动布娃娃控制器。我有一个布娃娃,它是由使用关节相互连接的物理骨骼(刚体)制成的。我使用胡克斯定律将布娃娃的物理骨骼旋转与动画骨骼相匹配。
我使用销接头将手固定在物体(Rigidbody)上以使其拾取。
它工作得很好,但问题是,举起你所站立的物体会使它漂浮到空中。知道为什么吗?
以下是部分代码:
func hookes_law(displacement: Vector3, current_velocity: Vector3, stiffness: float, damping: float) -> Vector3:
return (stiffness * displacement) - (damping * current_velocity)
for b:PhysicalBone3D in physics_bones:
var target_transform: Transform3D = animated_skel.global_transform * animated_skel.get_bone_global_pose(b.get_bone_id())
var current_transform: Transform3D = global_transform * physical_skel.get_bone_global_pose(b.get_bone_id())
var rotation_difference: Basis = (target_transform.basis * current_transform.basis.inverse())
var torque = hookes_law(rotation_difference.get_euler(), b.angular_velocity, angular_spring_stiffness, angular_spring_damping)
torque = torque.limit_length(max_angular_force)
b.angular_velocity += torque * delta
我原以为物体会翻转或根本不动。
我的理论是,物体正在推动布娃娃,而布娃娃以某种方式反复拉动物体。
降低胡克斯定律的刚度有点帮助,但这也使布娃娃变得非常虚弱。
我想通了。事实证明,由于某种原因,改变物理骨骼的碰撞层和遮罩会弄乱它。