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

bevy_xpbd_3d_interp

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

3个版本

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

#637 in 游戏开发

每月 24 次下载

MIT/Apache

32KB
213

Bevy XPBD Interp 是一个用于 bevy_xpbd 刚体插值的简单库。它通过根据自上次物理更新以来积累的时间来插值当前和之前的物理状态的位置/旋转。插值值存储在可能包含网格/摄像机等的某些分离实体的 Transform 中。物理对象本质上需要分成一个受物理影响的实体和一个用于渲染的实体。

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

注意:bevy_xpbd 被分为二维和三维库。这个库也是如此,分为 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

依赖关系

~19–47MB
~741K SLoC