Bevy 如何根据参数的类型“范围”其系统?

Rod*_*olz 7 rust bevy

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 中被弃用。