10 个不稳定版本 (4 个重大更新)
0.5.0 | 2024年7月4日 |
---|---|
0.4.2 | 2024年2月21日 |
0.3.3 | 2024年1月11日 |
0.3.2 | 2023年11月9日 |
0.1.0 | 2023年6月19日 |
#5 in #rigid-bodies
每月 1,411 次下载
在 9 个 包中使用 9 (8 直接使用)
1MB
13K SLoC
Bevy XPBD (已废弃,转而使用 Avian)
⚠️ Bevy XPBD 已废弃,转而使用其继任者 Avian。将不再对 Bevy XPBD 进行进一步的开发或维护。有关背景信息,请参阅 #346。
Bevy XPBD 是一个基于 扩展位置动态学 (XPBD) 的 2D 和 3D 物理引擎,为 Bevy 游戏引擎 构建。
设计
以下是 Bevy XPBD 中使用的部分核心设计原则。
- 专为 Bevy 制作,适用于 Bevy。 不包含现有引擎的包装。
- 提供直观且熟悉的 API。 人体工程学是良好体验的关键。
- 尽可能利用 ECS。 引擎应该感觉像是 Bevy 的一部分,而无需维护一个单独的物理世界。
- 使用高度模块化的插件架构。 用户应该能够用自己的实现替换引擎的部分。
- 拥有良好的文档。 如果不知道如何使用它,物理引擎就没有意义。
功能
以下是 Bevy XPBD 当前的一些功能。
- 动态、运动学和静态刚体
- 线性和角速度
- 外部力、扭矩和冲量
- 重力和重力比例
- 线性和角阻尼
- 锁定平移和旋转轴
- 刚体主导
- 自动休眠下的自动停用
- 由 Parry 提供的碰撞检测
- 具有可配置碰撞层、密度、材质属性等更多内容的碰撞体
- 碰撞事件
- 访问碰撞实体
- 使用自定义系统过滤和修改碰撞
- 手动接触查询和交点测试
- 约束和关节
- 用于创建基于位置的约束的灵活 API
- 内置的几种关节类型:固定、距离、滑动、旋转、球形
- 支持自定义关节和其他约束
- 空间查询
- 光线投射、形状投射、点投影和相交测试
- 用于光线投射和形状投射的人体工程学组件化API
- 灵活的
SpatialQuery
系统参数 - 空间查询过滤器
- 用于碰撞体、AABB、接触、关节、休眠、轴和空间查询的调试渲染
- 可配置的调度和高度可定制
- 高度模块化插件架构,可以自由扩展和替换引擎的部分
- 支持自定义碰撞后端
f32
/f64
精度(默认为f32
)
您可以在docs.rs上的目录中找到更完整的信息和文档。
文档
使用示例
首先,将bevy_xpbd_2d
或bevy_xpbd_3d
添加到您的Cargo.toml
依赖项中
# For 2D applications:
[dependencies]
bevy_xpbd_2d = "0.5"
# For 3D applications:
[dependencies]
bevy_xpbd_3d = "0.5"
# If you want to use the most up-to-date version, you can follow the main branch:
[dependencies]
bevy_xpbd_3d = { git = "https://github.com/Jondolf/bevy_xpbd", branch = "main" }
以下是一个非常简单的示例,其中带有初始角速度的盒子掉落在平面上。这是Bevy的3d_scene示例的修改版。
use bevy::prelude::*;
use bevy_xpbd_3d::prelude::*;
fn main() {
App::new()
.add_plugins((DefaultPlugins, PhysicsPlugins::default()))
.add_systems(Startup, setup)
.run();
}
fn setup(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>,
) {
// Plane
commands.spawn((
RigidBody::Static,
Collider::cuboid(8.0, 0.002, 8.0),
PbrBundle {
mesh: meshes.add(Plane3d::default().mesh().size(8.0, 8.0)),
material: materials.add(Color::srgb(0.3, 0.5, 0.3)),
..default()
},
));
// Cube
commands.spawn((
RigidBody::Dynamic,
AngularVelocity(Vec3::new(2.5, 3.4, 1.6)),
Collider::cuboid(1.0, 1.0, 1.0),
PbrBundle {
mesh: meshes.add(Cuboid::default()),
material: materials.add(Color::srgb(0.8, 0.7, 0.6)),
transform: Transform::from_xyz(0.0, 4.0, 0.0),
..default()
},
));
// Light
commands.spawn(PointLightBundle {
point_light: PointLight {
intensity: 2_000_000.0,
shadows_enabled: true,
..default()
},
transform: Transform::from_xyz(4.0, 8.0, 4.0),
..default()
});
// Camera
commands.spawn(Camera3dBundle {
transform: Transform::from_xyz(-4.0, 6.5, 8.0).looking_at(Vec3::ZERO, Vec3::Y),
..default()
});
}
更多示例
您可以在/crates/bevy_xpbd_2d/examples和/crates/bevy_xpbd_3d/examples中找到许多2D和3D示例。
这些示例支持f32
和f64
精度,因此代码中包含一些特征相关类型,如Scalar
和Vector
。在实际使用中,这些并不需要,因此您可以根据您选择的功能直接使用f32
或f64
类型。
默认情况下,示例使用f32
。要运行f64
版本,您需要禁用默认功能并手动选择维度和精度
# Manually specify dimension and precision. `parry-f64` enables collision detection using Parry.
cargo run --example cubes --no-default-features --features "3d f64 parry-f64"
支持的Bevy版本
注意:Bevy XPBD已被弃用,不会支持Bevy的未来版本。相反,建议使用其继任者Avian。
Bevy | Bevy XPBD |
---|---|
0.14 | 0.5 |
0.13 | 0.4 |
0.12 | 0.3 |
0.11 | 0.2 |
0.10 | 0.1 |
未来功能
- 连续碰撞检测(CCD)
- 实体级碰撞钩子或回调
- 用于激活碰撞类型的标志,如对特定刚体类型、传感器或父级的碰撞
- 性能优化(更好的广相、并行求解器...)
- 关节电机
- 关节,也称为多体关节
- 适当的跨平台确定性
- 软体(布料和可变形固体)
- 也许流体模拟
贡献
如果您遇到任何问题,请随时提交问题或创建拉取请求。对于较大的更改和添加,最好在创建拉取请求之前先提交问题或向我寻求意见。
您还可以在Bevy Discord服务器的bevy_xpbd
线程中寻求帮助或提问,我的Discord用户名是Jondolf
(@jondolfdev
)。
致谢
衷心感谢Bevy社区全体成员给予的大力支持!你们的所有贡献、见解和需求都对推动Bevy中物理状态的发展起到了巨大作用,这也是我不断努力打造最佳引擎的动力。
我还要特别感谢Johan Helsing,他的灵感启发了这个项目,并在早期阶段给了我极大的帮助。他的原始教程系列是代码bevy_xpbd
存在的根本原因,没有他的支持和贡献,项目不可能达到今天的水平。
许可证
Bevy XPBD是免费和开源的。本存储库中的所有代码都根据您的选择,采用以下两种许可证之一双许可:
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
- Apache许可证,版本2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
任选其一。
依赖项
~20–60MB
~1M SLoC