Bevy是一个新的 Rust 游戏引擎和 ECS,它有一个功能,它根据参数的类型“确定”其系统。从它的文档:
我们传递给“系统函数”的参数定义了系统在哪些实体上运行。在这种情况下,greet_people 将在具有 Person 和 Name 组件的所有实体上运行。
它看起来像这样:
struct Person;
struct Name(String);
fn greet_people(person: &Person, name: &Name) {
println!("hello {}", name.0);
}
Run Code Online (Sandbox Code Playgroud)
Bevy 是如何做到这一点的?我以为我在某处读到 Rust 不支持这种方式的反射。
Teh*_*ers 11
Bevy 定义了一组特征(和),这些特征由匹配这些签名的函数实现。这些特征随后由 Bevy 序曲输出。这样做的一个限制是,您只能将最多具有一定数量参数的函数转换为系统,并且参数必须按特定顺序排列([command?]、[resources...]、[queries/components. ..])。IntoQuerySystem IntoForEachSystem
编辑:For-each 系统在 Bevy 0.4 中被弃用。