Rust Bevy Local Resourcesについて
はじめに
本記事はBevy非公式(と思えないほど素晴らしい)サイトのメモである。
メモ
Local<T>
はResMut<T>
と同様のシステムパラメータである。これによりあらゆる型のインスタンスに変更可能でアクセスできる。
Res<T>/ResMut<T>
は全システム間で共有されるグローバルな単一のインスタンスを参照する。一方、Local<T>
は特定システム専用の個別のインスタンスである。
#[derive(Default)] struct MyState; fn my_system1(mut local: Local<MyState>) { } fn my_system2(mut local: Local<MyState>) { // 引数localは上のmy_systemで参照しているlocalとは別のインスタンス }
Local<T>
はDefault
またはFromWorld
を実装しなければならない。
同じ型のLocal
をSystemに複数持たせることができる。
SystemをApp
に追加する時、.config
ファイルを使用して、Local
をデフォルト値以外の値に初期化できる。
.config
は特定のシステムパラメータを構成するBevyAPIである。ほとんどのシステムパラメータはこれをサポートしていないが、Local
はサポートしている。
/// `my_system`用の設定 /// /// このSystemは`Local<MyConfig>を使用して設定にアクセスする。 /// `App`ビルド時、設定に値が設定される。 /// #[derive(Default)] struct MyConfig { magic: usize, } fn my_system( mut cmd: Commands, my_res: Res<MyStuff>, config: Local<MyConfig>, ) { // TODO: do stuff } fn main() { App::build() .add_system(my_system.system().config(|params| { // `Local<MyConfig>は`my_system`の第3引数である。 // したがって、`.2`でアクセスできる。 params.2 = Some(MyConfig { magic: 420, }); })) .run(); }