Skip to content

Reflect——运行时反射

到目前为止,你写的每一个系统、每一个组件都是编译期确定的:类型在代码里写死,字段名在编译时就绑好了。这在绝大多数时候够用——但有一类问题它解决不了:运行时才知道要操作哪个类型或哪个字段

场景文件里写着 hp: 30,引擎怎么知道该给哪个组件的哪个字段赋值?编辑器 Inspector 怎么能列出任意组件的所有属性并让你修改?远程调试工具 BRP(Bevy Remote Protocol)怎么在运行时读取实体上的任意组件?答案都是同一套机制——Reflect(运行时反射)

Reflection 让你在运行时获得类型的名字、字段列表、字段类型,并动态地读写它们。Bevy 的反射不是附加功能,而是引擎的基础设施:Scene 的序列化/反序列化、bevy_inspector_egui 的属性面板、bevy_remote 的远程调试协议,全部建立在 bevy_reflect 之上。本章从 #[derive(Reflect)] 开始,讲到 TypeRegistry、动态读写,最后说明为什么这套机制撑起了引擎的半壁江山。

配套代码在 code/ch31-reflect

console
cargo run -p ch31-reflect --example listing-31-01

本章内容: