Latest commit 6f15887
本地资源
相关的官方文档:[ecs_guide]
什么是本地资源
本地资源就是“仅供当前系统使用的数据”。
Local<T> 是一个类似 ResMut<T>的系统参数,能可变地访问某个数据类型的实例(这个实例独立于实体和组件)。
资源与本地资源的区别
Res<T> 和 ResMut<T> 指的是 T 类型的单一全局实例,所有系统共享;每个 Local<T> 参数都是一个单独的实例,专属于使用 Local<T> 的系统。
#![allow(unused)] fn main() { #[derive(Default)] struct MyState; fn my_system1(mut local: Local<MyState>) { // 做一些事 } fn my_system2(mut local: Local<MyState>) { // 这个 locl 变量与 my_system1 的 locl 变量不同 } }
Local<T> 类型必须实现 Default 或 FromWorld。Local 会自动初始化。
系统可以拥有多个相同类型的 Local。
指定初始值
Local<T> 总是用默认的数值来自动初始化。
如果需要特殊的数据,可以用闭包代替。todo。使用闭包可以将数据“移动到函数中”。
此示例显示了如何在不使用 Local<T> 的情况下初始化某些数据以配置系统:
#[derive(Default)] struct MyConfig { magic: usize, } fn my_system( mut cmd: Commands, my_res: Res<MyStuff>, // 请注意,这不是有效的系统参数 config: &MyConfig, ) { // TODO: 做一些事 } fn main() { let config = MyConfig { magic: 420, }; App::new() // 创建一个闭包来使用 config 变量 .add_system(move |cmd: Commands, res: Res<MyStuff>| { // 从闭包内部调用函数 my_system(cmd, res, &config); }) .run(); }