6 个版本
0.3.0 | 2024 年 7 月 6 日 |
---|---|
0.2.3 | 2024 年 3 月 21 日 |
0.1.0 | 2024 年 3 月 19 日 |
#59 在 游戏开发
1,586 每月下载量
在 bevy_scroller 中使用
125KB
2.5K SLoC
为 Bevy UI 定制的性能/调试叠加层
赞助我
Bevy 兼容性
Bevy 版本 | 插件版本 |
---|---|
0.14 |
0.3 |
0.13 |
0.2 ,0.1 |
此包为 Bevy 游戏引擎 提供了游戏性能/调试 UI 叠加层的实现。
此包的目标是为任何 Bevy 项目提供尽可能多的帮助
- 使用 Bevy UI 制作(不是 egui 或任何其他第三方 UI 解决方案)
- 易于设置(参见
simple
示例) - 模块化!您可以选择要显示的信息!
- 选择任何预定义条目的组合(参见
specific_entries
示例)- 帧率(FPS)、帧时间、帧数、ECS 实体数、CPU 使用率、RAM 使用率、系统时间、运行时间、固定时间步长、固定超步长、光标位置、窗口分辨率、窗口缩放因子、窗口模式、呈现模式
- 实现您自己的自定义条目以显示您喜欢的任何内容!
- (参见
custom_minimal
和custom
示例)
- (参见
- 选择任何预定义条目的组合(参见
- 可定制的外观/样式(参见
settings
、fps_minimalist
示例) - 支持使用自定义字体或颜色突出显示值!
- 让您能够快速注意到需要您注意的事情。
启动 Perf UI 可以像这样简单
commands.spawn(PerfUiBundle::default());
这创建了一个具有精选条目的 Perf UI,这些条目据我看来是这个包中提供的最有用的。
如果您想要包含所有可用条目的 UI(由于性能开销,不建议这样做)
commands.spawn(PerfUiCompleteBundle::default());
如果您想使用您选择的特定条目创建 Perf UI,只需使用 PerfUiRoot
+ 您想要的条目启动一个实体,而不是使用上面的包。
commands.spawn((
PerfUiRoot::default(),
PerfUiEntryFPS::default(),
PerfUiEntryClock::default(),
// ...
));
还有一些包可以帮助您添加一些常见的条目组合
commands.spawn((
PerfUiRoot::default(),
// Contains everything related to FPS and frame time
PerfUiFramerateEntries::default(),
// Contains everything related to the window and cursor
PerfUiWindowEntries::default(),
// Contains everything related to system diagnostics (CPU, RAM)
PerfUiSystemEntries::default(),
// Contains everything related to fixed timestep
PerfUiFixedTimeEntries::default(),
// ...
));
如果您想自定义外观,请在每个结构体中设置各种字段,而不是使用default()
。
精美小部件
可以以其他方式可视化值,而不仅仅是显示为文本。
iyes_perf_ui
目前提供了一种这样的小部件实现:条形图。要使用它,请将您的条目包装在PerfUiWidgetBar
中。
例如,要显示FPS为条形图
commands.spawn((
PerfUiRoot::default(),
PerfUiWidgetBar::new(PerfUiEntryFPS::default()),
// ...
));
如果您想创建自己的自定义小部件,请查看实现PerfUiWidget
特质。
性能警告!
该软件包介于“有用的诊断/开发工具”和“技术演示”之间。
不幸的是,它确实会给您的应用程序引入显著的开销,尤其是在您启动一个包含大量条目/小部件的“完整”UI时。
请记住这一点:当没有启动性能UI时,您的游戏将运行得更快。一线希望:如果性能UI看起来很好,那么没有它将会更好。 ;)
为了使其更能代表您的实际性能,请考虑启动一个更简洁的性能UI,其中只包含对您最有用的几个条目(例如:fps、帧时间),而不是一个“完整”的UI。
我知道一个旨在帮助您测量性能的工具最终会显著降低您的性能,这很讽刺。我正在考虑减少开销的方法。
根据我自己的测量,大部分开销来自bevy_ui
的布局系统在更新性能UI的复杂布局时遇到困难,而不是来自iyes_perf_ui
中的任何实际代码。因此,为了提高性能,我需要想出一种简化UI并使其更容易为Bevy处理的方法。或者Bevy需要更好地处理UI布局。 ;)
依赖关系
~35–73MB
~1.5M SLoC