Latest commit d7a897d
系统链接
相关的官方文档:[system_chaining]
多个 Rust 函数可以组成一个 Bevy 系统。
定义多个有输入有输出的函数,把它们连接在一起,当成一个系统来运行。
这就是“系统链接”。请注意区别:不是创建“多个系统”以链的顺序执行,而是创建“一个系统”执行“多个 Rust 函数”。
系统链接不是用于系统之间的通信,请用用事件来通信。
好的应用程序能够从系统中返回错误(允许使用 Rust 的 ? 操作符)并在合适的地方处理错误:
#![allow(unused)] fn main() { fn net_receive(mut netcode: ResMut<MyNetProto>) -> std::io::Result<()> { netcode.receive_update()?; Ok(); } fn handle_io_errors(In(result): In<std::io::Result<()>>) { if let Err(e) = result { eprintln!("I/O error occurred: {}", e); } } }
上面的系统不能单独注册(Bevy 不知道怎样这些系统的处理输入和输出),必须组合成系统链:
fn main() { App::new() // ... .add_system(net_receive.chain(handle_io_errors)) // ... .run(); }
性能警告
Bevy 把整个链条当成一个大的系统,所有的资源和查询都组合在一起,这意味着并行性可能受到限制,影响性能。
todo:这句不理解,影响链内还是另一条链? 不要把需要可变访问的系统添加进链条,否则会阻止所有受影响的链的并行运行。