Rust bevy_rapier2dで単振動が勝手に減衰してしまう

実現したいこと

  • 不可解な減衰力を無効にして明示的に減衰を制御したい

発生している問題・分からないこと

本来ならダンパーのない物体の単振動は初期の振幅のまま振動し続けるはずです。
ですが下記のコードのようにシンプルにPrismaticJointとJointMotorで減衰を設定していないばね機構をつくりシミュレーションしたところ、減衰が掛かり振動が止まってしまいました。
この不可解な減衰を取り払いたいです。

該当のソースコード

Rust

1use bevy::prelude::*;2use bevy_rapier2d::prelude::*;3fn main() {4 App::new()5 .add_plugins(DefaultPlugins)6 .add_plugins(RapierPhysicsPlugin::<NoUserData>::pixels_per_meter(100.0))7 .insert_resource(RapierConfiguration {8 timestep_mode: TimestepMode::Fixed { dt: 0.01, substeps: 1 },9 ..Default::default()10 })11 .add_plugins(RapierDebugRenderPlugin::default())12 .add_systems(Startup, setup_graphics)13 .add_systems(Startup, setup_physics)14 .insert_resource(Time::<Fixed>::from_seconds(0.01))15 .run();16}17 18fn setup_graphics(mut commands: Commands) {19 commands.spawn(Camera2dBundle::default());20}21 22fn setup_physics(mut commands: Commands) {23 24 let fixed_box = commands.spawn((25 TransformBundle::from(Transform::from_xyz(0.0, 100.0, 0.0)),26 RigidBody::Fixed,27 ))28 .id();29 30 31 let arm = commands.spawn((32 TransformBundle::from(Transform::from_xyz(0.0, 80.0, 0.0)),33 RigidBody::Dynamic,34 Collider::cuboid(30.0, 30.0),35 ))36 .id();37 38 39 let joint = PrismaticJointBuilder::new(Vec2::new(0.0, 1.0))40 .local_anchor1(Vec2::new(0.0, 0.0))41 .local_anchor2(Vec2::new(0.0, 20.0))42 .motor_position(-5.0, 500.0, 0.0);43 44 commands.entity(arm).with_children(|cmd| {45 cmd.spawn(ImpulseJoint::new(fixed_box, joint));46 });47}

試したこと・調べたこと

上記の詳細・結果

.insert(Damping {linear_damping: 0.0, angular_damping: 0.0})
で明示的に指定しても変わらずでした。
また、ばねの単振動のみならず振り子でも同様の減衰が起きました。
検索してもそれらしいものは見当たらず、公式githubのissueを漁ってもありませんでした。

補足

バージョン:
rustc 1.77.2
bevy 0.13.2
bevy_rapier2d 0.25.0

コメントを投稿

0 コメント