3个不稳定版本
0.2.2 | 2024年2月25日 |
---|---|
0.2.1 | 2024年2月25日 |
0.2.0 |
|
0.1.1 | 2024年1月22日 |
0.1.0 |
|
350 在 模拟 中
每月下载 60 次
38KB
184 行
bevy_xpbd_3d_parenting
允许bevy_xpbd_3d
RigidBody
的子节点对其父节点施加力。
安装
# Use the latest release of bevy_xpbd_3d_parenting
[dependencies.bevy_xpbd_3d_parenting]
version = "0.2"
default-features = false
理论使用方法
此库导出一个单独的Plugin
,ParentingPlugin
,必须与bevy_xpbd_3d
的PhysicsPlugin
相同的Schedule
添加到应用程序中。
然后,任何修改这些InternalForce
的系统应该在
bevy_xpbd_3d_parenting::ParentingSystemSet::ManuallyClearForces;
父节点必须具有
RigidBody
RigidBody::Dynamic
或什么都不会移动- Collider以使bevy_xpbd正常工作
ExternalForce
持久性设置为false
(如果未遵守,将使用tracing
发出警告)TransformBundle
用于空间中的位置变换
全局变换
子节点必须具有
RigidBody
,参见父节点TransformBundle
,参见父节点InternalForce
以对父节点施加力
内部力的类型
内部力有两种类型,InternalForce::Global
和InternalForce::Local
。局部InternalForce
在父节点的局部空间中,而全局InternalForce
在全局空间中。这意味着局部InternalForce
将随父节点旋转,而全局InternalForce
则不会。
查看global_versus_local示例以进行演示。
快速使用示例
查看示例以获取完整示例。
// Shows a basic usage of [InternalForce].
use bevy::prelude::*;
use bevy_xpbd_3d::prelude::*;
use bevy_xpbd_3d_parenting::InternalForce;
fn main() {
App::new()
.add_plugins((
DefaultPlugins,
PhysicsPlugins::new(Update),
bevy_xpbd_3d_parenting::prelude::ParentingPlugin::new(Update),
))
.add_systems(Startup, setup)
.run();
}
fn setup(
mut commands: Commands,
mut meshs: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>,
) {
// cube
let mut cube = commands.spawn((
PbrBundle {
mesh: meshs.add(Mesh::from(Cuboid::default())),
transform: Transform::from_xyz(0., 5., 0.),
..default()
},
RigidBody::Dynamic,
// IMPORTANT: parent's external force must be non-persistent
// so that each frame this library can update it
ExternalForce::ZERO.with_persistence(false),
// Exact collider is arbitrary
Collider::capsule(1.0, 1.0),
));
// sphere child: using internal force
cube.with_children(|cube| {
cube.spawn((
PbrBundle {
mesh: meshs.add(Mesh::from(Sphere::new(0.5).mesh().uv(16, 32))),
// to the right a bit
transform: Transform::from_xyz(3.0, 0.0, 0.0),
..default()
},
// no rigidbody
// no external force
// internal force pushes downwards, which should rotate clockwise
InternalForce::new_local(Vec3::new(0., -3., 0.)),
));
});
}
运行示例
运行
cargo r --example rotating --features bevy_xpbd_3d/async-collider
cargo r --example global_versus_local --features bevy_xpbd_3d/async-collider
兼容性表格
Bevy | Bevy XPBD | Bevy XPBD 3D Parenting |
---|---|---|
0.12 | 0.3.3 | 0.1.0 |
0.13 | 0.4.2 | 0.2.0 |
开发笔记
cargo t
用于测试,它运行
- 每个功能标志的所有组合
- 多种
proptest
依赖项
~50–87MB
~1.5M SLoC