小编Bru*_*ner的帖子

如何在bevy游戏引擎中实现异步系统功能?

我目前正在开发一款基于 3D 体素的游戏,我希望能够根据玩家的运动生成程序块。

但在简单的系统中运行块生成会导致 FPS 大幅下降。

我已经尝试使用 来创建一个独立于其他所有内容运行的任务池std::sync::mpsc::channel,以生成块数据和网格,然后由正常的集群系统请求、缓冲,然后使用 生成commands.spawn(PbrBundle{...})

fn chunk_loader(
    pool: Res<Pool>,
    mut commands: Commands,
    mut meshes: ResMut<Assets<Mesh>>,
    mut materials: ResMut<Assets<StandardMaterial>>,
    mut chunkmap: ResMut<ChunkMap>,
    mut buffer: ResMut<Buffer>, // buffer of chunk data
) {
    let mut chunks = pool.request_chunks();
    buffer.0.append(&mut chunks);

    for _ in 0..CHUNK_UPDATES_PER_FRAME {
        if let Some( (chunk, mesh) ) = buffer.0.pop() {
            chunkmap.map.insert([chunk.x, chunk.y, chunk.z], chunk);
    
            let mesh = mesh.clone();
        
            commands.spawn_bundle(PbrBundle {
                mesh: meshes.add(mesh),
                transform: Transform::from_matrix(Mat4::from_scale_rotation_translation(
                    Vec3::splat(1.0),
                    Quat::from_rotation_x(0.0),
                    Vec3::new((chunk.x * CHUNK_SIZE as …
Run Code Online (Sandbox Code Playgroud)

asynchronous rust bevy

7
推荐指数
1
解决办法
4314
查看次数

标签 统计

asynchronous ×1

bevy ×1

rust ×1