3个版本
0.1.2 | 2024年2月21日 |
---|---|
0.1.1 | 2023年11月9日 |
0.1.0 | 2023年11月8日 |
#983 in 游戏开发
每月24次下载
32KB
213 行
Bevy XPBD Interp 是一个用于插值 bevy_xpbd 刚体的简单库。它通过基于自上次物理更新以来积累的时间量,在当前和先前物理状态的位置/旋转之间进行插值。插值值存储在某个可能持有网格/相机等的单独实体的 Transform
中。物理对象本质上需要分成一个受物理影响的实体和一个被渲染的实体。
在许多情况下,插值在正常的/较高的物理更新频率(例如,60Hz)下会产生明显的差异,但在1Hz下您也会看到完美的平滑运动。
注意:
bevy_xpbd
分成了2D和3D的包。这个库也做了同样的事情,分为bevy_xpbd_2d_interp
和bevy_xpbd_3d_interp
。
用法
将 bevy_xpbd
和 bevy_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