B0002
为了保持Rust 关于引用规则(一个可变引用或任意数量的不可变引用)在资源上,如果在一个系统中存在一个可变资源,就不可能存在不止一个同类资源。 这可能发生在Res<T>
和 ResMut<T>
之间,它们都是针对同一个 T
,或在 NonSend<T>
和 NonSendMut<T>
之间,它们都是针对同一个 T
。
错误代码示例
use bevy::prelude::*;
fn update_materials(
mut material_updater: ResMut<Assets<StandardMaterial>>,
current_materials: Res<Assets<StandardMaterial>>,
) {
// ...
}
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Update, update_materials)
.run();
}
这会导致崩溃,因为无法同时在 Assets<StandardMaterial>
上拥有可变资源和不可变资源。
由于可变资源已经提供了对当前资源值的访问权限,因此可以删除不可变资源。
use bevy::prelude::*;
fn update_materials(
mut material_updater: ResMut<Assets<StandardMaterial>>,
) {
// ...
}
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Update, update_materials)
.run();
}