[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-633a5714-6064-41d0-832b-c0d5330ef6c4":3,"$fuUlfyr5zkdqult6DD6CQueGCikJx9cfXqJQwjsu1McQ":43},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":34},"633a5714-6064-41d0-832b-c0d5330ef6c4","bevy-ecs-expert","掌握Rust中的Bevy实体组件系统（ECS），涵盖系统、查询、资源和并行调度。","cat_life_career","mod_other","sickn33,other","---\nname: bevy-ecs-expert\ndescription: \"Master Bevy's Entity Component System (ECS) in Rust, covering Systems, Queries, Resources, and parallel scheduling.\"\nrisk: safe\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Bevy ECS Expert\n\n## Overview\n\nA guide to building high-performance game logic using Bevy's data-oriented ECS architecture. Learn how to structure systems, optimize queries, manage resources, and leverage parallel execution.\n\n## When to Use This Skill\n\n- Use when developing games with the Bevy engine in Rust.\n- Use when designing game systems that need to run in parallel.\n- Use when optimizing game performance by minimizing cache misses.\n- Use when refactoring object-oriented logic into data-oriented ECS patterns.\n\n## Step-by-Step Guide\n\n### 1. Defining Components\n\nUse simple structs for data. Derive `Component` and `Reflect`.\n\n```rust\n#[derive(Component, Reflect, Default)]\n#[reflect(Component)]\nstruct Velocity {\n    x: f32,\n    y: f32,\n}\n\n#[derive(Component)]\nstruct Player;\n```\n\n### 2. Writing Systems\n\nSystems are regular Rust functions that query components.\n\n```rust\nfn movement_system(\n    time: Res\u003CTime>,\n    mut query: Query\u003C(&mut Transform, &Velocity), With\u003CPlayer>>,\n) {\n    for (mut transform, velocity) in &mut query {\n        transform.translation.x += velocity.x * time.delta_seconds();\n        transform.translation.y += velocity.y * time.delta_seconds();\n    }\n}\n```\n\n### 3. Managing Resources\n\nUse `Resource` for global data (score, game state).\n\n```rust\n#[derive(Resource)]\nstruct GameState {\n    score: u32,\n}\n\nfn score_system(mut game_state: ResMut\u003CGameState>) {\n    game_state.score += 10;\n}\n```\n\n### 4. Scheduling Systems\n\nAdd systems to the `App` builder, defining execution order if needed.\n\n```rust\nfn main() {\n    App::new()\n        .add_plugins(DefaultPlugins)\n        .init_resource::\u003CGameState>()\n        .add_systems(Update, (movement_system, score_system).chain())\n        .run();\n}\n```\n\n## Examples\n\n### Example 1: Spawning Entities with Require Component\n\n```rust\nuse bevy::prelude::*;\n\n#[derive(Component, Reflect, Default)]\n#[require(Velocity, Sprite)]\nstruct Player;\n\n#[derive(Component, Default)]\nstruct Velocity {\n    x: f32,\n    y: f32,\n}\n\nfn setup(mut commands: Commands, asset_server: Res\u003CAssetServer>) {\n    commands.spawn((\n        Player,\n        Velocity { x: 10.0, y: 0.0 },\n        Sprite::from_image(asset_server.load(\"player.png\")), \n    ));\n}\n```\n\n### Example 2: Query Filters\n\nUse `With` and `Without` to filter entities efficiently.\n\n```rust\nfn enemy_behavior(\n    query: Query\u003C&Transform, (With\u003CEnemy>, Without\u003CDead>)>,\n) {\n    for transform in &query {\n        \u002F\u002F Only active enemies processed here\n    }\n}\n```\n\n## Best Practices\n\n- ✅ **Do:** Use `Query` filters (`With`, `Without`, `Changed`) to reduce iteration count.\n- ✅ **Do:** Prefer `Res` over `ResMut` when read-only access is sufficient to allow parallel execution.\n- ✅ **Do:** Use `Bundle` to spawn complex entities atomically.\n- ❌ **Don't:** Store heavy logic inside Components; keep them as pure data.\n- ❌ **Don't:** Use `RefCell` or interior mutability inside components; let the ECS handle borrowing.\n\n## Troubleshooting\n\n**Problem:** System panic with \"Conflict\" error.\n**Solution:** You are likely trying to access the same component mutably in two systems running in parallel. Use `.chain()` to order them or split the logic.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,235,1652,"2026-05-16 13:08:41",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"其他","other","mdi-page-next-outline","其他类型Skill",5,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":32,"skillCount":33,"createdAt":26},"职场发展","career","mdi-briefcase-outline","面试准备、简历优化、职业规划",4,575,[35],{"id":36,"skillId":4,"version":37,"fileName":38,"fileSize":39,"filePath":40,"fileHash":41,"manifest":42,"createdAt":19},"5639e0fe-173b-4ce3-bf24-d298d155e618","1.0.0","bevy-ecs-expert.zip",1814,"uploads\u002Fskills\u002F633a5714-6064-41d0-832b-c0d5330ef6c4\u002Fbevy-ecs-expert.zip","14ba5a43426d4a7098ad32a229c359833726d188aee24ca9c0cb10bebbf06c67","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":3704}]",{"code":44,"message":45,"data":46},200,"success",{"items":47,"stats":48,"page":51},[],{"averageRating":49,"totalRatings":49,"ratingCounts":50},0,[49,49,49,49,49],{"limit":52,"offset":49,"hasMore":53,"nextOffset":52,"ratedOnly":16},15,false]