如何在使用bevy rust创建网格后修改它?

4
我正在开发一个过程生成系统,并希望能够在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>>'`
非常感谢您的帮助。
以下是我的当前代码大致内容:
// 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);
        }
    }

你能展示一个小的代码例子吗,这样我们可以更容易地帮助你吗? - AlexN
1个回答

3

对于Bevy,我还比较新手,但如果你想改变一个资产,我认为你应该使用ResMut而不是Res

例如:assets: Res<Assets<Mesh>> 应该实际上是 mut assets: ResMut<Assets<Mesh>>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接