#physics #bevy #collision #gamedev #2d-3d #game

heron

为2D和3D bevy游戏提供直观的物理API。(由rapier提供支持)

45个版本 (22个稳定版)

5.0.2 2022年11月14日
4.3.0 2022年11月12日
4.0.0-alpha.32022年7月31日
3.1.0 2022年5月20日
0.3.0 2021年3月21日

#2434 in 游戏开发

Download history 61/week @ 2024-04-21 47/week @ 2024-04-28 45/week @ 2024-05-05 44/week @ 2024-05-12 72/week @ 2024-05-19 44/week @ 2024-05-26 67/week @ 2024-06-02 30/week @ 2024-06-09 58/week @ 2024-06-16 54/week @ 2024-06-23 35/week @ 2024-06-30 9/week @ 2024-07-07 34/week @ 2024-07-14 44/week @ 2024-07-21 90/week @ 2024-07-28 24/week @ 2024-08-04

193 每月下载量
3 个工具箱中使用(2个直接使用)

MIT 许可证

195KB
3.5K SLoC

海伦

License Crates.io Docs Bevy tracking Build Zenhub

为2D和3D bevy 游戏提供直观的物理API。(由rapier提供支持)

⚠ 项目已停止开发!

海伦现已停止开发。将不再提供新功能、修复或支持。

有关原因的更多详细信息,请阅读公告

设计原则

  • 尽可能使用 bevy 类型、资源和组件(例如Vec3QuatTransformEvents等)
  • 提供适用于2D和3D的单个API。
  • 面向数据。使用此库应感觉像它是bevy的一部分。
  • 避免通过句柄在资源中查找数据。数据应在组件中直接访问和修改。
  • 隐藏实际的物理引擎。这是用户不需要担心实现的细节。
    • 但是,允许高级用户访问底层的rapier资源,以确保用户不会因为海伦API中缺少元素而受阻。

它的外观

use bevy::prelude::*;
use heron::prelude::*;

fn main() {
  App::new()
    .add_plugins(DefaultPlugins)
    .add_plugin(PhysicsPlugin::default()) // Add the plugin
    .insert_resource(Gravity::from(Vec3::new(0.0, -9.81, 0.0))) // Optionally define gravity
    .add_startup_system(spawn)
    .run();
}

fn spawn(mut commands: Commands) {
    commands

        // Spawn any bundle of your choice. Only make sure there is a `GlobalTransform`
        .spawn_bundle(SpriteBundle::default())

        // Make it a rigid body
        .insert(RigidBody::Dynamic)
        
        // Attach a collision shape
        .insert(CollisionShape::Sphere { radius: 10.0 })
        
        // Optionally add other useful components...
        .insert(Velocity::from_linear(Vec3::X * 2.0))
        .insert(Acceleration::from_linear(Vec3::X * 1.0))
        .insert(PhysicMaterial { friction: 1.0, density: 10.0, ..Default::default() })
        .insert(RotationConstraints::lock())
        .insert(CollisionLayers::none().with_group(Layer::Player).with_mask(Layer::World));
}

// Define your physics layers
#[derive(PhysicsLayer)]
enum Layer {
    World,
    Player,
    Enemies,
}

文档

MSRV

当前最低支持的Rust版本是:1.60

在次要版本中可能会增加到一个更新的稳定版本。(但仅在必要时)

在主要版本中将会增加到最新的稳定版本。(即使不是必要的)

支持的Bevy版本

bevy heron
0.8 4, 5
0.7 3
0.6 1, 2
0.5 0.4 - 0.13
0.4 0.1 - 0.3

此项目与bevy_rapier相比如何?

bevy_rapier 插件是一个非常好的选择,应该被考虑。

以下是两个项目之间的主要区别

  • heron 尝试提供一个更小、更简单的API,更易于使用。bevy_rapier 更完整且功能更强大,但稍微复杂一些。
  • heron 专注于游戏。 bevy_rapier 面向所有类型的物理模拟应用程序(包括游戏)。
  • bevy_rapierdimforge 维护,该公司也是 rapier 的开发者。 heron 也在积极维护,但它的演进速度不如 bevy_rapier 快。

heron 可能更适合简单的游戏和游戏马拉松,在这些场景中,学习和使用的便利性尤为重要,而缺乏高级功能并不成问题。

bevy_rapier 可能更适合大型/复杂游戏和其他类型的物理模拟,在这些情况下,学习/使用更全面/复杂的 API 可能更好。

贡献 / 联系

您可以在此处打开问题/讨论,或者在 bevy discord 中与我(Jomag#2675)讨论。

查看如何贡献

依赖关系

约 16-34MB
约 538K SLoC