我目前正在开发一款基于 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)