13个版本 (4个重大更新)
0.5.6 | 2024年8月15日 |
---|---|
0.5.5 | 2024年8月7日 |
0.5.2 | 2024年7月25日 |
0.4.2 | 2024年6月13日 |
0.1.0 | 2024年6月2日 |
#136 在 游戏开发
每月1,525次下载
在 2 Crate 中使用
50KB
484 行
bevy_ratatui_render
在终端内运行Bevy!
使用bevy无头渲染、ratatui 和 ratatui_image 将bevy应用程序的渲染输出打印到终端,使用unicode半块。
examples/cube.rs,bevy many_foxes 示例,sponza 测试场景
使用 bevy_ratatui 在bevy中设置ratatui并接收终端事件(键盘、焦点、鼠标、粘贴、大小调整)。
入门指南
cargo添加 bevy_ratatui_render bevy_ratatui
fn main() {
App::new()
.add_plugins((
DefaultPlugins,
RatatuiPlugins::default(),
RatatuiRenderPlugin::new("main", (256, 256)),
))
.add_systems(Startup, setup_scene_system)
.add_systems(Update, draw_scene_system.map(error))
.run();
}
fn setup_scene_system(
mut commands: Commands,
ratatui_render: Res<RatatuiRenderContext>,
) {
// spawn objects into your scene
...
commands.spawn(Camera3dBundle {
camera: Camera {
target: ratatui_render.target("main").unwrap(),
..default()
},
..default()
});
}
fn draw_scene_system(
mut ratatui: ResMut<RatatuiContext>,
ratatui_render: Res<RatatuiRenderContext>,
) -> io::Result<()> {
ratatui.draw(|frame| {
frame.render_widget(ratatui_render.widget("main").unwrap(), frame.size());
})?;
Ok(())
}
如上所示,RatatuiRenderPlugin
提供了一个可用的 RatatuiRenderContext
资源,它有两个主要方法
target(id)
:提供一个bevyRenderTarget
,可以设置为普通bevy摄像机的目标。widget(id)
:提供一个ratatui小部件,将最新渲染输出打印到相应的摄像机,使用unicode半块。
如果你不需要访问ratatui绘制循环,只想将渲染输出打印到整个终端,有一个便利函数(对于上述示例,使用此函数而不是添加 draw_scene_system
)
RatatuiRenderPlugin::new("main", (256, 256)).print_full_terminal()
还有一个便利函数用于在启动时以及终端大小调整时自动调整渲染纹理以匹配终端尺寸
RatatuiRenderPlugin::new("main", (1, 1)).autoresize()
要自定义如何从终端尺寸计算纹理尺寸,请提供一个回调到 autoresize_conversion_fn
RatatuiRenderPlugin::new("main", (1, 1))
.autoresize()
.autoresize_conversion_fn(|(width, height)| (width * 4, height * 3))
为了节省一些CPU周期,我还建议明确告诉bevy你不需要窗口
DefaultPlugins
.set(WindowPlugin {
primary_window: None,
exit_condition: ExitCondition::DontExit,
close_when_requested: false,
})
多个渲染
RatatuiRenderPlugin
可以多次添加到 bevy 中。要访问正确的渲染,请使用与您在 RatatuiRenderPlugin::new(id, dimensions)
中传入的相同字符串 id 来调用 target(id)
和 widget(id)
方法,这些方法位于 RatatuiRenderContext
资源中。
支持的终端
打印到终端依赖于终端支持 24 位颜色。我亲自测试并确认以下终端可以正确显示:
- Alacritty
- Kitty
- iTerm
- WezTerm
...但是任何支持 24 位颜色的终端都应能正常工作,如果其性能足够的话。
兼容性
bevy | bevy_ratatui_render |
---|---|
0.14 | 0.5 |
0.13 | 0.4 |
致谢
- 无头渲染代码改编自 bevy 的 无头渲染 示例 (@bugsweeper, @alice-i-cecile, @mockersf)。
- bevy 的 多狐狸 示例用于示例 gif。
- bevy_sponza_scene 用于示例 gif。
依赖项
~29–43MB
~712K SLoC