SuperAPI AI 工具集

bevy-project-templates

编程与开发

查看项目

更新于 10-16 06:08

技能介绍

用途

本技能用于在 Bevy 项目中挑选起始的 Cargo feature 集。当需要决定采用哪套 feature 组合作为项目起点时加载它;应用构建细节属于 bevy-project-foundations,本技能不附带模板仓库。目标版本为 Bevy 0.20+。

主要能力与配置档

默认 profile 启用 2d、3d、ui 与 audio 特性。若希望二进制更小,可关闭默认特性并只选一个 profile:

  • 2D crate:禁用默认集,仅启用 2d
  • 3D crate:替换为 3d 特性
  • UI 工具:启用 ui 特性加 DefaultPlugins
  • 无窗口(headless):default-features = false 搭配 MinimalPlugins

Cargo 配置示例:

[package]
name = "game"
version = "0.1.0"
edition = "2021"

[dependencies]
bevy = { version = "0.20", default-features = false, features = ["2d"] }

使用方式

有窗口游戏使用 DefaultPlugins,它带来窗口、输入与针对所启用特性的渲染器。

2D 起始代码生成一个摄像机:

fn setup_2d(mut commands: Commands) {
    commands.spawn(Camera2d);
}

pub struct FlatPlugin;

impl Plugin for FlatPlugin {
    fn build(&self, app: &mut App) {
        app.add_systems(Startup, setup_2d);
    }
}

fn main() {
    App::new().add_plugins((DefaultPlugins, FlatPlugin)).run();
}

3D 起始代码同样生成摄像机,但使用 3D 摄像机:

fn setup_3d(mut commands: Commands) {
    commands.spawn((Camera3d::default(), Transform::from_xyz(0.0, 2.0, 6.0)));
}

pub struct ScenePlugin;

impl Plugin for ScenePlugin {
    fn build(&self, app: &mut App) {
        app.add_systems(Startup, setup_3d);
    }
}

无窗口工具使用 MinimalPlugins 与普通 update 系统:

fn tick(mut frames: ResMut<FrameCount>) {
    frames.0 += 1;
}

#[derive(Resource, Default)]
struct FrameCount(u32);

fn main() {
    App::new()
        .add_plugins(MinimalPlugins)
        .init_resource::<FrameCount>()
        .add_systems(Update, tick)
        .run();
}

同一目标对应的 Bevy 写法:

设计 Bevy 惯用法
2D 起步 Cargo 特性 2d、DefaultPlugins、Camera2d
3D 起步 Cargo 特性 3d、DefaultPlugins、Camera3d
UI 工具 Cargo 特性 ui 加 DefaultPlugins
无窗口 default-features = false 加 MinimalPlugins

ECS 所有权与调度

核心 ECS 类型包括 Component、Resource、Query、Commands、Startup、Update、Fixed / FixedMain(bevy::time)、.chain()、Plugin、DefaultPlugins、MinimalPlugins。消息与观察者另有归属位,相关 API 见 bevy-events-messaging。系统默认并行运行,除非用 .chain() 对冲突系统排序。

所有权表:

部分 所有者 可变更者 调度
单个实体上的数据 Component 一个系统经 Query Update 或 FixedMain
整个应用的某个值 Resource 一个系统 Startup 插入,随后由读取它的调度访问
生成 Commands 生成系统 初始世界用 Startup,运行时生成用后续调度
必须无竞态的顺序 .chain() 仅链式系统 同一调度
插件边界 Plugin build 注册系统与资源 应用运行前

借用规则:两个系统若都对同一组件做可变查询,必须用 .chain() 排序,或拆分使只有一个写入;不相关系统保持并行。

决策指引:

需要 做法 不要
每实体数据 Component + Query 挂在实体上的场景树脚本
应用级配置或时钟 Resource 把该值复制到每个实体
稳定仿真步长 FixedMain 与 Fixed 时钟 把仿真绑定到原始帧 Update
启动生成 Startup 中的 Commands 从渲染系统生成
非共享状态的跨系统通知 bevy-events-messaging 中的消息或观察者位 在本文件中发明新事件类型
文档集合之外的 API 先查官方文档 编造的 crate 或 API

禁止事项

  • 不要在文档 URL 中固定 /0.20.0/。原因:链接保持指向最新版,0.20 目标只在正文中说明一次。
  • 不要从两个无序系统对同一组件做可变查询。原因:调度会并行运行系统,除非用 .chain() 排序。
  • 不要在此发明物理、导航、网络或 XR crate。原因:本技能只引用有文档的 Bevy crate 与模块。
  • 不使用 Godot 的 project.godot 模板或导出预设。原因:Bevy 代码保持惯用 ECS 且只用有文档的 Bevy API。
  • 不在 Bevy 代码中使用 Godot 类型。原因:Bevy 代码保持惯用 ECS 且只用有文档的 Bevy API。
  • 不发明 API,也不把未具名第三方 crate 作为选定方案。原因:Bevy 代码保持惯用 ECS 且只用有文档的 Bevy API。

适用场景与限制

适用于:选择 Bevy 起始 Cargo feature 集、搭建 2D/3D/UI/无窗口项目骨架、确定插件组合与 ECS 所有权划分。

限制:不附带模板仓库;gitignore 与 CI 文件属于仓库而非引擎;不覆盖物理、导航、网络或 XR;不涉及 Godot 相关内容。官方页面保持无版本号的 bevy.org URL,bevy-master 上的库固定为 0.20.0。相关技能:前置为 bevy-master(中枢)与 bevy-project-foundations(Cargo 应用外壳),互补为 bevy-platform-desktop(有窗口目标);godot-project-templates 为等效的 Godot 技能。下游消费者暂未提供。