我正在开发一个过程生成系统,并希望能够在Bevy Rust中逐帧修改网格框架。
我尝试使用`assets.get_mut()`,但是出现了以下错误:`help: trait 'DerefMut' is required to modify through a dereference, but it is not implemented for 'bevy::prelude::Res<_, bevy::prelude::Assets<bevy::prelude::Mesh>>'`
非常感谢您的帮助。
以下是我的当前代码大致内容:
我尝试使用`assets.get_mut()`,但是出现了以下错误:`help: trait 'DerefMut' is required to modify through a dereference, but it is not implemented for 'bevy::prelude::Res<_, bevy::prelude::Assets<bevy::prelude::Mesh>>'`
非常感谢您的帮助。
以下是我的当前代码大致内容:
// Function which is executed at the very start
fn setup (
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>,
asset_server: Res<AssetServer>
) {
let mut mesh = Mesh::from(bevy::prelude::shape::Icosphere { radius: 0.5, subdivisions: 10 });
commands.spawn()
.insert_bundle(PbrBundle {
mesh: meshes.add(mesh),
material: materials.add(colour.into()),
..Default::default()
})
.insert(Transform::from_xyz(0.0, 0.0, 0.0));
}
// Function which is executed every frame
fn update_planets (
mut query: Query<(&Transform, &Handle<Mesh>)>,
assets: Res<Assets<Mesh>>
) {
let (transform, handle) = query.get_single_mut().expect("");
let mut mesh = assets.get_mut(handle.id); // Error caused here
if mesh.is_some() {
let positions = temp.attribute(Mesh::ATTRIBUTE_POSITION).unwrap();
if let VertexAttributeValues::Float32x3(thing) = positions {
let mut temporary = Vec::new();
for i in thingy {
let temp = Vec3::new(i[0], i[1], i[2]);
... // Modify temp here
temporary.push(temp);
}
mesh.unwrap().insert_attribute(Mesh::ATTRIBUTE_POSITION, temporary);
}
}