#bevy-ui #display #bevy #perf #gamedev #widgets #performance

iyes_perf_ui

为 Bevy UI 定制的性能/调试叠加层

6 个版本

0.3.0 2024 年 7 月 6 日
0.2.3 2024 年 3 月 21 日
0.1.0 2024 年 3 月 19 日

#59游戏开发

Download history 174/week @ 2024-04-22 156/week @ 2024-04-29 150/week @ 2024-05-06 215/week @ 2024-05-13 180/week @ 2024-05-20 161/week @ 2024-05-27 123/week @ 2024-06-03 154/week @ 2024-06-10 145/week @ 2024-06-17 198/week @ 2024-06-24 320/week @ 2024-07-01 445/week @ 2024-07-08 418/week @ 2024-07-15 402/week @ 2024-07-22 264/week @ 2024-07-29 424/week @ 2024-08-05

1,586 每月下载量
bevy_scroller 中使用

MIT/Apache

125KB
2.5K SLoC

为 Bevy UI 定制的性能/调试叠加层

Crates.io docs MIT/Apache 2.0

赞助我

GitHub Sponsors

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 使用率、系统时间、运行时间、固定时间步长、固定超步长、光标位置、窗口分辨率、窗口缩放因子、窗口模式、呈现模式
    • 实现您自己的自定义条目以显示您喜欢的任何内容!
  • 可定制的外观/样式(参见 settingsfps_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()

Screenshot of the simple example showing default configuration

Screenshot of the settings example showing multiple UIs with custom configuration

精美小部件

可以以其他方式可视化值,而不仅仅是显示为文本。

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