6个版本
0.3.1 | 2022年9月28日 |
---|---|
0.3.0 | 2022年9月27日 |
0.2.0 | 2022年8月5日 |
0.1.2 | 2022年6月9日 |
#1867 in 游戏开发
195KB
460 行
bevy_stat_bars
用于绘制如敌人精灵上方健康条等悬浮状态条的Bevy crate。
版本 0.3
- 支持Bevy 0.8
本次版本新增
- 完全重写。新的设计和API。
- 应该(希望)更容易使用,重新设计似乎更好,但如果您不喜欢这些变化,请告诉我。
- (似乎)现在与
bevy_inspector_egui
配合得很好。 - 暂时移除了任意方向的设置,只有可逆的水平线和垂直线。
- 状态条可以跟踪资源以及组件。
- 不需要插件,需要在您的Bevy ```App``` 中为每种状态条添加一个观察者,它们才能开始绘制。
- 使用PhantomData实现了单个实体上的多个状态条组件。这需要
使用方法
使用以下命令将依赖项添加到您的Cargo.toml文件中:
[dependencies.bevy_stat_bars]
version = "0.3"
然后,在您的Bevy App上注册您想要使用状态条观察的任何组件
use bevy_stat_bars::*;
App::new()
.add_plugins(DefaultPlugins)
.add_statbar_bar_component_observer::<HitPoints>()
// ..etc, rest of app
.run();
您还需要在这些组件上实现StatbarObservable
特质
impl StatbarObservable for HitPoints {
fn get_statbar_value(&self) -> f32 {
self.value / self.max
}
}
现在,您可以在实体上添加一个Statbar::<HitPoints>
组件来可视化其HitPoints组件
commands.entity(enemy_id)
.insert_bundle((
Statbar::<HitPoints> {
empty_color: Color::NAVY,
length: 10.,
thickness: 2.,
displacement: 8. * Vec2::Y,
..Default::default()
},
StatbarBorder::<HitPoints>::all(Color::WHITE, 1.),
));
示例
有六个示例您可以查看,涵盖了大多数功能和用例,用以下命令运行它们:
cargo run --example minimal_standalone
cargo run --example basic_interactive
cargo run --example observe_resource
cargo run --example demo
cargo run --example stress --release
cargo run --example stress2 --release
demo
示例可能是最有用的一个。
stress2
示例使用宏添加了数百种标记类型,编译可能需要几分钟。
注意事项
-
仅支持2D。
-
在编写示例时,我犯了一个错误,本应使用
.add_statbar_component_observer::<Stat<Health>>()
但我使用了
.add_statbar_component_observer::<Health>()
这很容易忽略。在这种情况下,crate会静默失败,并且不会渲染任何内容,让用户感到沮丧。
同样,如果状态条被设置为观察其父实体或不存在其他实体,它将渲染一个不会更新的状态条。
-
状态条使用具有990个Z深度的精灵绘制,如果您将相机向下移动超过10个单位,它们将不会绘制。您可以使用
StatbarDepth
资源更改深度。因此,使用
commands.insert_resource(StatbarDepth(500.));
所有状态条现在将以500个Z深度渲染。目前还没有办法控制单独状态条绘制的顺序。
-
仍然使用精灵进行渲染,这不是最佳选择,但性能似乎还可以。您可以通过运行
stress
示例来查看在高负载下的表现。我的rx580大约能跑到100fps。 -
add_statbar_component_observer
为您的Bevy应用中的每个观察到的组件添加六个系统。这也不是最佳选择,但似乎没有问题。在stress2
示例中,我得到了大约100fps,这个示例创建了100个实体,每个实体有200个Statbars。
未来计划
- 用自定义渲染器替换基于精灵的渲染。我已经编写了一些片段着色器,并且应该会有更好的性能,并有一些很好的效果,比如圆角和颜色渐变。
- 饼图仪表
- 标签和数字指示器
- 某种形式的,可能是有条件功能的或仅用于调试的,故障检测,当您插入未注册的Statbars时,或当Statbar找不到它应该观察的组件时,会给出错误。
- 为StatbarObservable推导宏。
- 自动排列/堆叠Statbar组。我认为这会更困难,但我昨晚想到了一种简单的方法。
依赖关系
~33–48MB
~816K SLoC