bevy-ecs-expert
Ajuda seu agente a entender e usar o sistema ECS do Bevy em Rust. Cobre sistemas, consultas, recursos e agendamento paralelo para otimizar o código.
O que ela faz
Este guia ensina como criar jogos de alta performance usando a estrutura de dados do Bevy ECS em Rust. Você aprenderá a organizar as partes do código (sistemas), otimizar como os dados são buscados (queries), gerenciar informações globais (recursos) e fazer várias partes rodarem ao mesmo tempo (paralelismo).
Quando usar
- ✓Ao criar jogos com o motor Bevy em Rust.
- ✓Ao projetar partes do jogo que precisam rodar em paralelo.
- ✓Ao otimizar o desempenho do jogo, buscando dados de forma eficiente.
Exemplo do que pedir para a IA
“Como eu faço para que meu personagem se mova na tela usando Bevy ECS?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
O Bevy ECS organiza o jogo em 'componentes' (dados simples), 'sistemas' (funções que operam nesses dados) e 'recursos' (dados globais). Ele gerencia como esses sistemas interagem e rodam, permitindo otimizar o desempenho.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add sickn33/agentic-awesome-skills --skill bevy-ecs-expertOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/bevy-ecs-expert/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Especialista em Bevy ECS
Visão Geral
Um guia para construir lógica de jogo de alta performance usando a arquitetura ECS orientada a dados do Bevy. Aprenda como estruturar sistemas, otimizar consultas, gerenciar recursos e alavancar a execução paralela.
Quando Usar Esta Habilidade
- Use ao desenvolver jogos com o motor Bevy em Rust.
- Use ao projetar sistemas de jogo que precisam rodar em paralelo.
- Use ao otimizar a performance do jogo minimizando falhas de cache.
- Use ao refatorar lógica orientada a objetos para padrões ECS orientados a dados.
Guia Passo a Passo
1. Definindo Componentes
Use structs simples para dados. Importe bevy::prelude::*; adicione Reflect apenas quando a reflexão/inspeção for necessária. Os trechos são alternativas e não duplicam definições de Player/Velocity em um único escopo.
#[derive(Component, Reflect, Default)]
#[reflect(Component)]
struct Velocity {
x: f32,
y: f32,
}
#[derive(Component)]
struct Player;
2. Escrevendo Sistemas
Sistemas são funções Rust regulares que consultam componentes.
fn movement_system(
time: Res<Time>,
mut query: Query<(&mut Transform, &Velocity), With<Player>>,
) {
for (mut transform, velocity) in &mut query {
transform.translation.x += velocity.x * time.delta_secs();
transform.translation.y += velocity.y * time.delta_secs();
}
}
3. Gerenciando Recursos
Use Resource para dados globais (pontuação, estado do jogo).
#[derive(Resource, Default)]
struct GameState {
score: u32,
}
fn score_system(mut game_state: ResMut<GameState>) {
game_state.score += 10;
}
O sistema de pontuação de exemplo incrementa a cada Update; use eventos de gameplay ou um timer explícito para pontuação significativa, em vez de implicar comportamento de pontuação independente da taxa de quadros.
4. Agendando Sistemas
Adicione sistemas ao construtor App, definindo a ordem de execução se necessário.
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.init_resource::<GameState>()
.add_systems(Update, (movement_system, score_system).chain())
.run();
}
Exemplos
Exemplo 1: Spawnando Entidades com Componente Obrigatório
use bevy::prelude::*;
#[derive(Component, Reflect, Default)]
#[require(Velocity, Sprite)]
struct Player;
#[derive(Component, Default)]
struct Velocity {
x: f32,
y: f32,
}
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn((
Player,
Velocity { x: 10.0, y: 0.0 },
Sprite::from_image(asset_server.load("player.png")),
));
}
Exemplo 2: Filtros de Consulta
Use With e Without para filtrar entidades eficientemente.
fn enemy_behavior(
query: Query<&Transform, (With<Enemy>, Without<Dead>)>,
) {
for transform in &query {
// Only active enemies processed here
}
}
Melhores Práticas
- ✅ Faça: Use filtros
Query(With,Without,Changed) para reduzir a contagem de iteração. - ✅ Faça: Prefira
Resem vez deResMutquando o acesso somente leitura for suficiente para permitir a execução paralela. - ✅ Faça: Use
Bundlepara spawnar entidades complexas atomicamente. - ❌ Não faça: Armazene lógica pesada dentro de Componentes; mantenha-os como dados puros.
- ❌ Não faça: Use
RefCellou mutabilidade interna dentro de componentes; prefira o empréstimo normal do ECS; qualquer design de mutabilidade interna ainda precisa de Send/Sync válidos e uma razão clara de sincronização.
Solução de Problemas
Problema: Pânico do sistema com erro "Conflito". Solução: O agendador normalmente ordena sistemas conflitantes. Bevy B0001 frequentemente se refere a consultas incompatíveis dentro de um único sistema; use filtros disjoint With/Without ou ParamSet conforme apropriado. Encadear dois sistemas não repara parâmetros conflitantes dentro de um sistema. Veja Bevy B0001.
Limitações
- Fixe a versão do Bevy do projeto e verifique seu guia de migração/API. Exemplos atuais usam delta_secs e componentes obrigatórios; versões mais antigas do Bevy podem diferir. Enemy/Dead são marcadores de componente de propriedade da aplicação e player.png é um asset da aplicação, não um arquivo empacotado. Nenhum benchmark de compilação/performance do motor é reivindicado aqui.
- Não trate a saída como substituta para validação específica do ambiente, testes ou revisão de especialistas.
- Pare e peça esclarecimentos se os inputs necessários, permissões, limites de segurança ou critérios de sucesso estiverem ausentes.
Perguntas frequentes
O que são 'Componentes'?
Componentes são como caixas simples que guardam dados sobre um objeto no jogo, como posição, velocidade ou vida. Eles são definidos como 'structs' em Rust.
O que são 'Sistemas'?
Sistemas são as funções que fazem as coisas acontecerem no jogo. Eles pegam os componentes de vários objetos e os modificam, como fazer um personagem se mover com base na sua velocidade.
O que são 'Recursos'?
Recursos são dados que pertencem ao jogo inteiro, não a um objeto específico. Exemplos incluem a pontuação do jogador ou o estado atual do jogo (como 'pausado' ou 'em andamento').
Detalhes
Descrição original do autor
Master Bevy's Entity Component System (ECS) in Rust, covering Systems, Queries, Resources, and parallel scheduling.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #2415
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
Skills parecidas
benchmark-optimization-loop
Faz seu agente melhorar a velocidade de algo de forma medida. Ele testa várias versões e escolhe a mais rápida que ainda funciona corretamente.
affaan-m/ECC
change-impact
Ajuda seu agente a analisar o impacto de mudanças no código antes de fazê-las. Ele compara o planejado com o real depois, cobrindo caminhos, dados, testes e documentação. É útil para mudanças arriscadas ou que afetam várias partes do sistema.
affaan-m/ECC
click-path-audit
Faz seu agente rastrear todos os botões e interações do usuário para achar bugs. Ele encontra problemas onde funções parecem funcionar sozinhas, mas falham juntas. Útil quando bugs persistem mesmo após depuração.
affaan-m/ECC