1 个不稳定发布
| 新 1.0.1 |
|
|---|---|
| 0.1.0 | 2024年8月14日 |
#359 在 游戏开发
281 每月下载量
15KB
106 行
bevy_previous
一个简单的库,用于 bevy 访问组件的先前值。
示例
假设一个由具有 struct Health(pub u32) 组件的敌人组成的游戏。每当敌人被击中时,应显示一个文本,显示他们失去的健康量。
为此,我们可以使用bevy的更改检测,但是为了显示健康量的差异,我们还需要以前的健康值。这就是bevy_previous的作用所在。
struct Health(pub u32);
fn main() {
App::new()
.add_plugins(PreviousPlugin::<Health>::default())
.add_systems(Update, print_differences)
.run();
}
fn print_differences(query: Query<(&Health, &Previous<Health>), Changed<Health>>) {
for (health, previous_health) in &query {
println!("Health reduced by {}", previous_health - health);
}
}
深入
将PreviousPlugin::<T>注册以激活组件T的先前值。请注意,默认情况下,更改在Last计划中更新。您也不需要手动添加Previous<T>组件,这将在Last计划中自动完成。这也意味着Query<(&T, &Previous<T>)>将不会匹配刚刚创建的T实体。
如果您想自定义将Previous<T>设置回T的计划,您可以在PreviousPlugin以及Previous中将它作为第二个类型参数传递,如下所示。
struct Health(pub u32);
fn main() {
App::new()
.add_plugins(PreviousPlugin::<Health, FixedLast>::default())
.add_systems(FixedUpdate, print_differences)
.run();
}
fn print_differences(query: Query<(&Health, &Previous<Health, FixedLast>), Changed<Health>>) {
for (health, previous_health) in &query {
println!("Health reduced by {}", previous_health.0.0 - health.0);
}
}
唯一重要的是,Previous在游戏逻辑之后更新。
由于这个特定使用案例与FixedMain相当常见,因此存在类型别名:FixedPreviousPlugin<T>和FixedPrevious<T>。如果您有自定义计划,请考虑为这些也添加类型别名。
兼容性
bevy |
bevy_previous |
|---|---|
0.14 |
0.1 |
bevy_previous的主分支与bevy的主分支保持同步。
关于PreviousPlugin::default()的说明
此功能仅适用于实现了 DefaultSchedule 特质的计划。这是标准 bevy 计划自动实现的,但对你自己的计划,你必须手动使用 derive(DefaultSchedule) 辅助宏实现 DefaultSchedule,或者使用 PreviousPlugin::new(schedule)。
特性标志
| 标志 | 描述 |
|---|---|
derive |
default: 启用 DefaultSchedule 的 derive 宏 |
serde |
default: 启用 serde 对 Previous 的实现 |
依赖
~23MB
~427K SLoC