7 个版本

0.2.0 2024年2月18日
0.1.0 2023年12月2日
0.0.12 2023年11月16日
0.0.11 2023年9月26日

#2274 in 游戏开发

50 每月下载量
用于 4 crates

MIT/Apache

63KB
1.5K SLoC

Dexterous Developer

GitHub Workflow Status (with event) GitHub Workflow Status (with event) crates.io cli Static Badge

bevy 游戏引擎的实验性热重载系统。灵感来自 DGriffin91 的荒谬 bevy 热重载 - 添加了重新加载任意系统的能力,以及随时间变换资源/组件结构的能力。

完整的文档可在以下位置找到:https://lee-orr.github.io/dexterous_developer/

特性

  • 明确定义您游戏的可重载区域 - 这可能包括系统、组件、状态、事件和资源(有一些限制)
  • 在重载时将资源重置为默认值或预先确定的值
  • 序列化/反序列化您可重载的资源 & 组件,允许您在它们与反序列化器兼容的情况下演变它们的模式(使用 rmp_serde)
  • 标记实体在热重载时删除
  • 在热重载后运行系统
  • 创建函数在进入/退出状态或在热重载时设置和拆除
  • 仅在您明确启用时在构建中包含任何热重载功能 - 例如,通过使用 CLI 启动器
  • 跨平台/跨设备热重载 - 在开发环境中运行 "热重载服务器",并在其他地方执行应用程序。为了获得最佳效果,开发环境应是一个 Linux 设备或基于 Linux 的开发容器,但它也可以配置为直接在 Windows 或 Mac 上运行 - 尽管可靠性较低。由于始终可以设置在 Linux 上托管 docker-in-docker 环境以支持 Windows/mac,因此直接在 Windows/mac 上进行交叉编译不是优先事项,这已被证实是有效的。 此功能在当前版本中不起作用,但将在未来重新实现

已知问题

  • 不会在移动设备或 WASM 上工作

安装

通过运行以下命令获取 CLI:cargo install dexterous_developer_cli

您可以通过在终端中运行 dexterous_developer_cli run 来运行您的 dexterous 代码。

在您的 Cargo.toml 中添加以下内容

[lib]
name = "lib_THE_NAME_OF_YOUR_GAME"
path = "src/lib.rs"
crate-type = ["rlib"]

[dependencies]
bevy = "0.13"
dexterous_developer = "0.1.1"
serde = "1" # If you want the serialization capacities

[package.metadata]
hot_reload_features = ["bevy/dynamic_linking", "bevy/embedded_watcher"] # this injects these features into the build, enabling the use of bevy's dynamic linking and asset hot reload capacity.

如果您的游戏还不是库,请将所有主要逻辑移动到 lib.rs 而不是 main.rs。然后,在您的 main.rs 中 - 调用 bevy_main 函数

fn main() {
    lib_NAME_OF_YOUR_GAME::bevy_main();
}

并且在你的 lib.rs 文件中,你的 main 函数应改为

#[hot_bevy_main]
pub fn bevy_main(initial_plugins: impl InitialPlugins) {
    App::new()
        .add_plugins(initial_plugins.initialize::<DefaultPlugins>()) // You can use either DefaultPlugins or MinimnalPlugins here, and use "set" on this as you would with them
    // Here you can do what you'd normally do with app
    // ... and so on
}

如果你有一个插件并想要添加可重载的元素,请在定义该插件的文件中添加以下内容


impl Plugin for MyPlugin {
    fn build(&self, app: &mut App) {
        app
            .setup_reloadable_elements::<reloadable>();
    }
}

#[dexterous_developer_setup]
fn reloadable(app: &mut ReloadableAppContents) {
    app
        .add_systems(Update, this_system_will_reload);
}

Bevy 版本支持

Bevy Dexterous Developer
0.13 >= 0.2
0.12 0.0.12, 0.1
0.11 <= 0.0.11

依赖项

~2–16MB
~206K SLoC