小结与练习
小结
本章核心概念:
- BSN(Bevy Scene Notation):
bsn!宏提供的声明式场景描述,支持组件、子实体、观察者、资产引用 - 场景组合:场景函数返回
impl Scene,通过包含其他场景实现复用,字段级 Patch 只覆盖需要改的值 - 命名引用:
#Name注册实体名并允许跨实体引用,bsn_list!让多个根实体共享命名作用域 - Template 系统:
Default + Clone用于简单组件,FromTemplate用于有Handle<T>或Entity字段的组件 - DynamicWorld:基于反射的序列化系统,
DynamicWorld::from_world+serialize输出 RON 文件,DynamicWorldRoot从文件加载
关键流程:
- 代码场景:
bsn! { ... }→spawn_scene→ 实体生成 - 文件场景:构造 World →
DynamicWorld::from_world→serialize→ 写文件 →asset_server.load→DynamicWorldRoot→ 实例化
练习
按钮工厂:写一个
button(label: &str)场景函数,返回带Button、Node、BackgroundColor和子实体Text的场景。用bsn_list!同时生成 3 个不同标签的按钮。Boss 变体:基于 Listing 32-3 的
enemy()函数,写一个elite_enemy()函数,组合enemy()并覆盖Health和Damage。再写一个boss()函数,组合elite_enemy()并附加子实体(小兵)。跨实体引用:用
#Name和EntityTemplate实现一个"炮塔锁定目标"的场景:炮塔实体有一个Target(Entity)组件,引用同一bsn!作用域内的目标实体。保存与热重载:在 Listing 32-6 的基础上,运行时手动编辑
assets/scenes/level.scn.ron(改一个 Health 值),观察控制台是否输出新的实体数据。提示:Bevy 的AssetPlugin默认启用文件监听。