#physics #interpolation #bevy #gamedev #physics-2d #xpbd #object

bevy_xpbd_2d_interp

一个用于bevy_xpbd刚体插值的简单库

3个版本

0.1.2 2024年2月21日
0.1.1 2023年11月9日
0.1.0 2023年11月8日

#983 in 游戏开发

每月24次下载

MIT/Apache

32KB
213

Bevy XPBD Interp 是一个用于插值 bevy_xpbd 刚体的简单库。它通过基于自上次物理更新以来积累的时间量,在当前和先前物理状态的位置/旋转之间进行插值。插值值存储在某个可能持有网格/相机等的单独实体的 Transform 中。物理对象本质上需要分成一个受物理影响的实体和一个被渲染的实体。

在许多情况下,插值在正常的/较高的物理更新频率(例如,60Hz)下会产生明显的差异,但在1Hz下您也会看到完美的平滑运动。

注意:bevy_xpbd 分成了2D和3D的包。这个库也做了同样的事情,分为 bevy_xpbd_2d_interpbevy_xpbd_3d_interp

用法

bevy_xpbdbevy_xpbd_interp 添加为依赖项

[dependencies]  
bevy_xpbd_2d = "0.4"
bevy_xpbd_2d_interp = "0.1.2"
# or
[dependencies]  
bevy_xpbd_3d = "0.4"
bevy_xpbd_3d_interp = "0.1.2"

然后将 XPBDInterpolationPlugin 添加到您的应用程序中

app.add_plugins(XPBDInterpolationPlugin);

现在您可以将 InterpolatedPosition 和/或 InterpolatedRotation 组件添加到任何具有 Transform 的实体中

// The entity being affected by bevy_xpbd
let physics_entity = commands
    .spawn((
        RigidBody::Kinematic,
        Position::default(),
        Rotation::default(),
    ))
    .id();

// Rendered box that uses the interpolated position/rotation
commands.spawn((
    PbrBundle {
        mesh: mesh_assets.add(Mesh::from(shape::Box::new(1.0, 1.0, 1.0))),
        transform: Transform::default(), 
        ..default()
    }, 
    InterpolatedPosition::from_source(physics_entity),
    InterpolatedRotation::from_source(physics_entity),
));

请参阅 'crates/bevy_xpbd_2d_interp/examples/box_2d.rs''crates/bevy_xpbd_3d_interp/examples/box_3d.rs' 中的完整示例。使用 cargo run --example box_2d/box_3d 运行它们。

支持版本

Bevy Bevy XPBD Bevy XPBD Interp
0.13 0.4 0.1.2
0.12 0.3.2 0.1.1
0.12 0.3.1 0.1.0

依赖项

~21–48MB
~751K SLoC