关于 bevy-game-engine
面向使用 Bevy 和 Rust 开发游戏的开发者,提供 ECS、应用结构、渲染及输入等基础指导。内容还包含按任务分类的参考文件和开发命令。
主要功能
- 01讲解 ECS、插件、调度与状态
- 02涵盖 2D、3D 渲染和 UI
- 03提供输入、资源与事件参考
- 04给出项目结构和常用命令
适用场景
- 01启动新的 Bevy 游戏项目
- 02实现输入处理和状态切换
- 03加载资源并组织游戏系统
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ laurigates/ claude-plugins --skill bevy-game-engine安装后在 Claude Code 中输入/bevy-game-engine确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/assets-and-states.mdevents.mdinput.mdproject-architecture.md详细介绍
Bevy 游戏引擎
Bevy 游戏开发方面的专家知识。Bevy 是一款使用 Rust 构建、以数据驱动的游戏引擎,注重易用性、模块化和性能。
适用场景
| 在以下情况下使用此技能…… | 在以下情况下改用 bevy-ecs-patterns…… |
|---|---|
| 开始新的 Bevy 游戏项目 | 优化 ECS 查询性能或原型布局 |
| 学习或应用基本 ECS 概念 | 实现复杂的系统调度或排序 |
| 处理输入(键盘、鼠标、游戏手柄) | 使用更改检测(Changed<T>、Added<T>) |
| 管理游戏状态和状态转换 | 使用 ParamSet 或并行查询迭代 |
| 加载和管理资源 | 设计实体关系层级 |
| 设置插件和应用结构 | 调试原型碎片化或存储策略 |
| 处理事件和资源 | 实现批量生成或延迟操作 |
核心专长
Bevy 架构
- 实体组件系统(ECS):采用实体、组件和系统的数据导向设计
- 插件系统:通过可复用插件实现模块化游戏组织
- 调度:系统排序和执行时机
- 资源:系统可访问的全局单例数据
- 事件:系统之间的类型化消息传递
- 状态:游戏状态管理和状态转换
渲染
- 2D 渲染:精灵、精灵表、文本渲染、2D 摄像机
- 3D 渲染:PBR 材质、网格、光照、阴影、摄像机
- UI:用于游戏内界面的 bevy_ui
- 着色器:自定义 WGSL 着色器和渲染管线
参考文件
ECS 核心、项目设置和下方的命令集足以满足初步需求。根据任务需要打开一个链接即可——除非打开,否则不会加载 references/ 下的任何内容。
| 当前任务 | 文件 | 内容 |
|---|---|---|
| 读取玩家输入 | references/input.md | ButtonInput 键盘/鼠标轮询、按下与刚按下状态、光标位置、游戏手柄和重新绑定相关指引 |
| 加载资源或驱动状态机 | references/assets-and-states.md | AssetServer 句柄和 LoadState 门控、States 枚举、OnEnter/OnExit/run_if(in_state)、NextState 时机 |
| 解耦两个需要通信的系统 | references/events.md | #[derive(Event)]、EventWriter/EventReader、add_event 注册、两帧缓冲区及排序注意事项 |
| 规划不断扩大的游戏,或排查帧耗时 | references/project-architecture.md | 目录布局、插件/标记组件组织、查询过滤和性能分析指引、bundle 和系统集 |
关键能力
ECS 基础
use bevy::prelude::*;
// Components are plain data structs
#[derive(Component)]
struct Player;
#[derive(Component)]
struct Health(f32);
#[derive(Component)]
struct Velocity(Vec2);
// Spawn entities with components
fn spawn_player(mut commands: Commands) {
commands.spawn((
Player,
Health(100.0),
Velocity(Vec2::ZERO),
SpriteBundle {
transform: Transform::from_xyz(0.0, 0.0, 0.0),
..default()
},
));
}
// Systems query for components
fn move_player(
time: Res<Time>,
mut query: Query<(&Velocity, &mut Transform), With<Player>>,
) {
for (velocity, mut transform) in &mut query {
transform.translation += velocity.0.extend(0.0) * time.delta_seconds();
}
}
应用结构
use bevy::prelude::*;
fn main() {
App::new()
// Default plugins (window, rendering, input, etc.)
.add_plugins(DefaultPlugins)
// Custom plugins
.add_plugins(GamePlugin)
// Resources
.insert_resource(GameSettings::default())
// Startup systems (run once)
.add_systems(Startup, setup)
// Update systems (run every frame)
.add_systems(Update, (
player_movement,
collision_detection,
update_score,
))
.run();
}
// Organize with plugins
pub struct GamePlugin;
impl Plugin for GamePlugin {
fn build(&self, app: &mut App) {
app.add_systems(Startup, spawn_player)
.add_systems(Update, player_input);
}
}
基本命令
# Create new Bevy project from the official template (recommended — ships an
# opinionated app skeleton, CI, and release profiles). See rust-plugin's
# cargo-generate skill.
cargo generate --git https://github.com/TheBevyFlock/bevy_new_2d --name my_game
# Or start from an empty crate
cargo new my_game
cd my_game
cargo add bevy
# Run with fast compile times (debug)
cargo run
# Run with optimizations
cargo run --release
# Enable dynamic linking for faster compiles (dev only)
cargo run --features bevy/dynamic_linking
# Common dev dependencies
cargo add bevy_egui # Debug UI
cargo add bevy_rapier2d # 2D physics
cargo add bevy_rapier3d # 3D physics
cargo add bevy_asset_loader # Asset loading helpers
cargo add leafwing-input-manager # Advanced input
Agent 优化
| 场景 | 命令 |
|---|---|
| 快速编译检查 | cargo check 2>&1 | head -30 |
| 快速运行测试 | cargo test --lib -- --test-threads=1 -q |
| 使用快速编译运行(开发模式) | cargo run --features bevy/dynamic_linking |
| 运行优化构建 | cargo run --release |
| 检查常见问题 | cargo clippy -- -W clippy::all 2>&1 | head -50 |
| 列出项目中的插件 | grep -rn "impl Plugin for" src/ --include="*.rs" |
| 列出游戏状态 | grep -rn "derive.*States" src/ --include="*.rs" |
| 查找事件定义 | grep -rn "derive.*Event" src/ --include="*.rs" |
| 列出依赖项 | cargo metadata --format-version=1 | jq -r '.packages[0].dependencies[].name' |
如需了解详细的 ECS 模式、高级查询和系统调度,请参阅 bevy-ecs-patterns 技能。
评论
支持 Markdown