Bevy Engine
Entidades, componentes, sistemas e schedules - o motor de jogos Bevy ECS em Rust.
Busque em todas as páginas da documentação
Entidades, componentes, sistemas e schedules - o motor de jogos Bevy ECS em Rust.
use bevy::prelude::*;
#[derive(Component)]
struct Velocity(Vec2);
fn move_system(mut query: Query<(&mut Transform, &Velocity)>, time: Res<Time>) {
for (mut transform, velocity) in &mut query {
transform.translation += velocity.0.extend(0.0) * time.delta_secs();
}
}Quando usar isto:
use bevy::prelude::*;
#[derive(Component)]
struct Player;
#[derive(Component)]
struct Velocity(Vec2);
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.add_systems(Update, (player_input, move_system))
.run();
}
fn setup(mut commands: Commands) {
commands.spawn((Player, Velocity(Vec2::ZERO), Transform::default()));
commands.spawn(Camera2d);
}
fn player_input(
keys: Res<ButtonInput<KeyCode>>,
mut q: Query<&mut Velocity, With<Player>>,
) {
let mut v = Vec2::ZERO;
if keys.pressed(KeyCode::KeyW) { v.y += 1.0; }
if keys.pressed(KeyCode::KeyS) { v.y -= 1.0; }
if keys.pressed(KeyCode::KeyA) { v.x -= 1.0; }
if keys.pressed(KeyCode::KeyD) { v.x += 1.0; }
for mut vel in &mut q {
vel.0 = v.normalize_or_zero() * 300.0;
}
}
fn move_system(mut query: Query<(&mut Transform, &Velocity)>, time: Res<Time>) {
for (mut t, v) in &mut query {
t.translation += v.0.extend(0.0) * time.delta_secs();
}
}O que isto demonstra:
Velocity; o sistema de movimento lê-oWith<Player> visa a entidade do jogadorUpdate| Peça | Papel |
|---|---|
| Entidade | Handle de ID |
| Componente | Dados na entidade |
| Sistema | Função que consulta o mundo |
| Recurso | Singleton global (Time, Assets) |
.before/.after ou mescle sistemas.LoadState ou use SceneBundle quando pronto.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| macroquad | Pequenos jogos de jam 2D | Precisa de um gráfico 3D completo |
| Fyrox | 3D com muito editor | Quer minimalismo com foco em ECS |
| Custom wgpu | Controle total | Prioridade de tempo para diversão |
| Godot + Rust GDExtension | Fluxo de trabalho do designer | Pilha Rust pura |
Bevy suporta ambos via Camera2d/Camera3d e bundles correspondentes - mesmos padrões ECS.
Rótulos SystemSet e restrições de ordenação nas schedules Update, FixedUpdate, PostUpdate.
DynamicScene com componentes refletidos serializa subconjuntos de entidades - nem todos os componentes refletem por padrão.
bevy_ui para nós de UI retidos; overlay egui via bevy_egui para ferramentas de depuração.
Crates da comunidade (bevy_replicon, etc.) - não no núcleo; planeje a arquitetura cedo para multiplayer.
Veja Performance para Jogos para profiling e layout de dados.
Plugins avian ou bevy_rapier integram-se com FixedUpdate - veja a página de física.
bevy_audio com handles do servidor de assets - veja Física e Áudio.
Input e Eventos para ações e gamepads.
Gráficos com wgpu quando passes personalizados são necessários.
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026