4个版本
0.2.2 | 2024年8月14日 |
---|---|
0.2.1 | 2024年5月12日 |
0.2.0 | 2024年3月4日 |
0.1.0 | 2024年3月2日 |
#146 in 游戏开发
每月156次下载
3MB
261 行
bevy_collider_gen
一个用于从具有透明度的图像中为bevy应用程序生成2D碰撞体的库
指定依赖项
默认情况下,bevy_rapier2d和avian2d(以前称为bevy_xpbd_2d)都被启用。这是为了帮助提供开箱即用的体验,特别是能够运行示例并尝试。
但您可能只想使用支持的一个物理引擎,因此当您在自己的crate中使用它时,请用以下内容填写bevy_collider_gen
依赖项:
[dependencies.bevy_collider_gen]
# replace "*" with the most recent version of bevy_collider_gen
version = "*"
features = ["rapier2d"]
default-features = false
例如,对于bevy_rapier2d
[dependencies.bevy_collider_gen]
# replace "*" with the most recent version of bevy_collider_gen
version = "*"
features = ["avian2d"]
default-features = false
示例
要查看此功能的效果,您可以运行示例。在没有参数的情况下,它会在assets/sprite
目录中生成具有png图像的各种碰撞体的场景
bevy_rapier2d
请注意,您必须启用rapier2d功能
cargo run --example rapier2d_colliders
avian2d
请注意,您必须启用avian2d功能
cargo run --example avian2d_colliders
您也可以指定图像的路径,示例将尝试为找到的对象生成一个或多个凸多边形碰撞体
关于/为什么
我在寻找一种方法来迭代一些具有复杂形状(而非简单几何形状)的2D场景,我想图像中应该有足够的信息来生成碰撞体,结果确实如此!因此,我将我的方法包装起来,以防其他人也能从中受益。
它是如何工作的
😄前往edges crate了解更多 https://github.com/shnewto/edges
注意事项
- 如文档中所述,此实现要求图像具有透明度,以便区分对象和非对象 :)
- 我想象对于生成较大规模的内容,即生成大于数百像素计数的精灵集的碰撞体,此实现在运行时可能不会高效。我建议序列化您喜欢的碰撞体并在应用程序中反序列化,而不是在需要性能提升时在加载时进行所有数值计算
为assets/sprite/car.png生成的碰撞体示例
(如图所示,这是您可以期望的类型,而不是可运行的bevy应用程序示例。那是在上面几个标题的地方)
凸多边形(仅bevy_raiper2d)
多边形
凸包
高度场
当前实现的最佳情况是,您生成的高度场图像要么位于图像中心,要么跨越整个图像宽度...
凸分解
我没有直接添加凸分解支持,因为当精灵很小,并且碰撞力强时,它们有点不可靠(由于rapier的依赖项中的边界索引导致的偶尔恐慌 💀)。但如果您想使用凸分解碰撞器,您可以使用类似下面的方法从您的图像的边缘坐标构建它们
let sprite_image = image_assets.get(sprite_handle.unwrap()).unwrap();
let edges = Edges::from(sprite_image)
let edge_coordinate_groups = edges.multi_image_edge_translated();
for coords in edge_coordinate_groups {
let indices: Vec<[u32; 2]> = (0..coords.len()).map(|i| [i as u32, i as u32]).collect();
let collider = Collider::convex_decomposition(&coords, &indices);
commands.spawn((
collider,
RigidBody::Fixed,
SpriteBundle {
texture: sprite_handle.unwrap().clone(),
..default()
},
));
}
许可
本存储库中的所有代码均采用以下任一许可证双授权:
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
- Apache许可证,版本2.0(LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
由您选择。
依赖关系
~36–75MB
~1.5M SLoC