10次重大发布

0.11.0 2023年7月29日
0.9.0 2023年4月30日
0.7.0 2023年3月6日
0.6.0 2022年11月13日
0.1.0 2021年11月7日

#740 in 游戏开发

Download history 16/week @ 2024-03-09 3/week @ 2024-03-16 43/week @ 2024-03-30 8/week @ 2024-04-06 1/week @ 2024-04-20 4/week @ 2024-05-11 11/week @ 2024-05-18 12/week @ 2024-05-25 26/week @ 2024-06-01 24/week @ 2024-06-08 9/week @ 2024-06-15 4/week @ 2024-06-22

每月64次下载

MIT/Apache

290KB
6K SLoC

bevy_proto

Crates.io Docs License

使用简单的配置文件在Bevy中生成实体,类似于Unity的预制体。

此crate可用于

  • 快速原型设计
  • 模组支持
  • 数据定义的行为

📋 功能

  • 使用配置文件轻松定义实体

    (
      name: "player",
       schematics: {
        "game::creature::Health": (
          value: 100,
        ),
      },
    )
    
  • 从其他原型继承功能

    (
      name: "Skeleton",
      templates: ["Enemy", "Creature"],
      // ...
    )
    
  • 设置整个实体层次结构

    (
      name: "Blaster",
      schematics: {
        "game::weapon::AmmoEntity": (
          // Even reference other entities in the tree:
          entity: EntityPath("./@1"),
        ),
      },
      children: ["Scope", "AmmoPack"]
    )
    
  • 自动加载资源

    (
      name: "Puppy",
      schematics: {
        "game::image::GameImage": (
          handle: AssetPath("textures/puppy.png"),
        ),
      },
    )
    
  • 生成!

    fn spawn_player(mut commands: ProtoCommands) {
      commands.spawn("player");
    }
    

📲 安装

将以下内容添加到你的 [dependencies] 部分中 Cargo.toml

bevy_proto = "0.11"

或者使用 cargo add

cargo add bevy_proto

📓 示例

查看 示例 文件夹以获取crate的使用示例和教程。

🕊 Bevy兼容性

bevy bevy_proto
0.11.0 0.11.0
0.10.1 0.10.0

有关此crate的旧版本,请参阅下面的 旧版本 部分。

🥅 目标

此crate功能基本完善。

还有一些我认为很有必要添加的功能。以下是当前目标和已完成的任务列表

目标 状态
反射支持
嵌套原型
包指定器 🚧
可配置的图示过滤和处理
原型参数 🚧
无实体的原型
值访问 🚧
自定义文件格式支持
改进文档 🚧
基准测试 🚧

🕰 旧版本

bevy_proto 的 0.8 版本之前,这个包依赖于 typetag 包。这使得我们能够通过使用 serdeDeserialize 来实现类似的目标,而不是使用 bevyFromReflect。这样做的好处是我们无需注册每个类型,但也有一些缺点。

首先,它在 WASM 上的表现有问题,这使得它的使用具有平台相关性。此外,它在 main 之前的生命周期行为并不保证由 Rust 编译器存在或按预期工作,这意味着它可能在未来的某个时刻突然停止工作。

最后,也是最重要的一点,这是 Bevy 本身目前不采取的方向。Bevy 正在构建其反射库,而社区中的许多人也正在跟随这一方向。随着这变得越来越标准化(尤其是随着编辑器的出现),更好地利用反射将是一个更好的选择。

然而,为了允许用户决定他们是否也想要切换,我已经在一个新的包下保留了基于原始 typetag 的代码

bevy_proto_typetag

我想这个包不会看到很多更新,除了提升 Bevy 版本之外。我可能会回来创建一个与这个包类似的流程,但我不对此作出任何承诺,因为我希望这个包是主要焦点。

依赖项

~20–59MB
~1M SLoC