3 个版本 (破坏性)
0.3.0 | 2024年7月14日 |
---|---|
0.2.0 | 2024年7月14日 |
0.1.0 | 2024年7月13日 |
#318 in 游戏开发
每月52 次下载
53KB
945 行
bevy_falling_sand
是一个插件,用于为您的 Bevy 项目添加落沙物理。
Bevy 版本
bevy_falling_sand |
bevy |
---|---|
0.3.x | 0.14.x |
0.1.x | 0.13.x |
示例
如果您克隆此仓库,将有一个示例可用,它提供了一个类似“沙盒”的完整GUI界面。我建议使用 --release
标志运行示例以最大化性能
cargo run --example sandbox --release
如何使用
创建粒子很简单,只需在具有 Transform
组件的实体上插入一个 ParticleType
变体即可,它将被添加到模拟中
commands.spawn((
ParticleType::Water,
SpatialBundle::from_transform(Transform::from_xyz(0., 0., 0.)),
));
当前限制
ChunkMap 大小
出于优化的原因,粒子底层映射机制使用一系列块,每个块在没有检测到给定帧中的移动时,将对其自身和包含的粒子引起“休眠”状态。因此,地图的总大小有限(默认为 1024x1024,从变换 (-512, 512)
到 (512, -512)
)。任何处理在此区域之外的粒子将导致恐慌。
这将在未来的版本中得到解决,该版本将修改 ChunkMap 以“跟随”具有任意指定组件的实体(例如,主相机),在移动时加载和卸载块。这将模拟一个“无限”空间,其中粒子可以驻留。
单线程模拟
目前,粒子模拟是单线程的。计划在未来的版本中实现多线程模拟。
如果您想在此期间调整 CPU 线程分配以进行性能实验,您可以尝试调整 Bevy 提供的默认任务池线程分配策略。我根据 CPU 制造商/架构找到了不同的性能结果(抱歉,没有提供基准测试)
use bevy::{
core::TaskPoolThreadAssignmentPolicy, prelude::*, tasks::available_parallelism,
};
fn main() {
let mut app = App::new();
app.add_plugins(DefaultPlugins
.set(TaskPoolPlugin {
task_pool_options: TaskPoolOptions {
compute: TaskPoolThreadAssignmentPolicy {
min_threads: available_parallelism(),
max_threads: std::usize::MAX,
percent: 1.0,
},
..default()
},
}));
}
可视化块行为
如果您想可视化块的行为,请插入 DebugParticles
资源
app.init_resource::<DebugParticles>()
演示
Steam
水
依赖项
~22–57MB
~1M SLoC