#调试 #重运行 #Bevy #游戏开发 #游戏引擎 #时间旅行

revy

Bevy游戏引擎的时间旅行调试器原型,使用Rerun构建

2个不稳定版本

0.15.0 2024年4月9日
0.14.0 2024年3月1日

#597 in 游戏开发

Download history 3/week @ 2024-05-21 1/week @ 2024-05-28 6/week @ 2024-06-04 9/week @ 2024-06-11

98 每月下载量

MIT/Apache

54KB
995

Revy

Latest version Documentation MIT Apache

Revy是Bevy游戏引擎的时间旅行调试器原型,使用Rerun构建。

基本思路是使用Revy来调查游戏玩法/物理/一般行为等类型的bug。
Revy不是一个图形调试器:对于图形调试,您可以使用例如RenderDoc
它也不是性能分析器:对于性能分析,Bevy与例如Tracy集成良好。

Revy通过每帧快照Bevy数据库的差异,并将这些差异记录到Rerun数据库中来实现。
这允许您在任何时间点检查和可视化引擎的状态,无论是实时还是事后。
这些录制可以随后共享以供回放或例如附加到bug报告。

https://github.com/rerun-io/revy/assets/2910679/cd096cbe-5e68-4acf-8010-e6c32c5568dc

示例

Breakout 3D形状 外星蛋糕爱好者
现场演示 现场演示 现场演示

⚠️ 这不是官方的Rerun项目。这是一个边实验,旨在探索Rerun等工具在游戏开发中可能带来的可能性。这不是一个完整、维护良好的项目——也不是旨在成为这样的项目。它可能存在许多bug并且运行缓慢,代码中充满了令人难以置信的混乱 🙃。

使用方法

  1. 安装Rerun查看器 (0.15).

  2. revy 添加到您的依赖项

    revy = "0.15"  # always matches the rerun version
    
  3. 初始化 rerun 插件

    .add_plugins({
        let rec = revy::RecordingStreamBuilder::new("<your_app_name>").spawn().unwrap();
        revy::RerunPlugin { rec }
    })
    

    这将启动后台的Rerun查看器并将录制数据流式传输到它。
    查看 RecordingStreamBuilder 文档以获取其他选项(保存到文件、连接到远程查看器等)。

自定义记录器

Revy将记录每个实体的每个组件(),要么使用内置的专用记录器之一,要么使用基于反射的通用记录器。

您还可以通过插入一个 RerunComponentLoggers 资源来注册您自己的自定义记录器

.insert_resource(revy::RerunComponentLoggers::new([
    (
        "bevy_render::view::visibility::ViewVisibility".into(),
        Some(revy::RerunLogger::new(
            |_world, _all_entities, entity, _component| {
                let suffix = None;

                use revy::external::rerun;
                let data = entity
                    .get::<ViewVisibility>()
                    .map(|vviz| {
                        revy::Aliased::<rerun::components::Text>::new(
                            "ViewVisibility",
                            rerun::components::Text(
                                if vviz.get() { ":)))" } else { ":'(" }.into(),
                            ),
                        )
                    })
                    .map(|data| Box::new(data) as _);

                (suffix, data)
            },
        )),
    ),
]))

兼容性

Bevy Revy Rerun
0.13 0.14 0.14
0.13 0.15 0.15

依赖项

~39–71MB
~1M SLoC