#hot-reload #bevy #applications #serialize-deserialize #reloadable #engine #dexterous-developer

build dexterous_developer_cli

一个用于热重载的 Rust 应用的 CLI 工具,使用 dexterous_developer 包

17 个版本 (4 个破坏性更新)

0.4.0-alpha.32024 年 8 月 17 日
0.4.0-alpha.02024 年 8 月 16 日
0.3.0 2024 年 7 月 4 日
0.2.0 2024 年 2 月 18 日
0.0.8 2023 年 8 月 28 日

#238 in 游戏开发

Download history 1/week @ 2024-06-01 250/week @ 2024-06-29 44/week @ 2024-07-06 4/week @ 2024-07-13 143/week @ 2024-07-27 2/week @ 2024-08-03 83/week @ 2024-08-10 214/week @ 2024-08-17

每月 442 次下载

MIT/Apache

190KB
4K SLoC

Dexterous Developer

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

Rust 的模块化热重载系统。

最新版本的文档可在以下位置找到: https://lee-orr.github.io/dexterous_developer/

您还可以找到 最新预发布版本的文档主分支的文档

功能

  • 一个用于构建和运行可重载的 Rust 项目的 CLI 工具,包括通过网络(跨设备)
  • 可直接与二进制包一起工作!
  • 序列化/反序列化元素的能力,允许随着时间的推移演变架构
  • 仅在您明确启用时才包含构建中的任何热重载功能 - 例如,通过使用 CLI 启动器
  • 创建适应其他框架的能力,允许您使用 Dexterous Developer 工具与其他工具一起使用。
  • 包含第一方 Bevy 适配器
  • 在 Windows、Linux 和 MacOS 上运行
  • 在 Linux 上,可以在运行主操作系统的同时在开发容器内进行开发,从而允许使用开发容器为游戏和其他 GUI 应用程序。

Bevy 特定

  • 明确定义游戏的重载区域 - 这可能包括系统、组件、事件和资源(有一些限制)
  • 在重载后重置资源到默认值或预定义值
  • 序列化/反序列化您的可重载资源与组件,允许您在它们与反序列化器兼容的前提下更新它们的模式(使用rmp_serde)
  • 标记在热重载时需要删除的实体
  • 在热重载后运行系统
  • 创建在进入/退出状态或热重载时设置和拆卸的函数

未来工作

  • 跨平台热重载 - 在开发环境中运行“热重载服务器”,并在不同的操作系统上执行应用程序
  • 移动端支持
  • 基于浏览器的WASM支持
  • WASI支持
  • 使用中间编译结果修补正在运行的库
  • 除了当前动态库方法外,支持使用进程间通信
  • 应添加基于GUI的启动器,尤其是针对移动端
  • 在bevy中支持ECS钩子和观察者

安装

通过运行以下命令安装CLI: cargo install [email protected]。这将安装2个命令行工具

  • dexterous_developer_cli - 用于构建项目,可能同时运行它
  • dexterous_developer_runner - 用于在另一台设备上运行项目

设置

您还需要将适当的dexterous开发者适配器添加到您的库依赖中,并设置“热”功能。例如,如果您正在使用bevy

[features]
hot = ["bevy_dexterous_developer/hot"]

[dependencies]
bevy = "0.14"
bevy_dexterous_developer = { version = "0.4.0-alpha.3"}
serde = "1" # If you want the serialization capacities

最后,您需要设置一个Dexterous.toml文件,该文件有助于定义一些必要的元素 - 例如哪些文件夹需要监视更改,以及哪些功能应该启用。有关更多信息,请参阅此存储库中的示例文件书籍

Bevy设置

在您的main.rs中,您的main函数应变为

reloadable_main!((initial_plugins) {
    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>();
    }
}

reloadable_scope!(reloadable(app) {
    app
        .add_systems(Update, this_system_will_reload);
})

Simple Visual示例展示了库的基本用法,并且书籍中也有更多信息。

使用热重载运行

要本地运行热重载应用程序,请使用cargo安装并运行dexterous_developer_cli(可选地传递特定的包或示例)。

要在同一平台上的不同机器上运行应用程序,请在两台机器上都使用cargo安装dexterous_developer_cli,然后在

  • 在开发机上运行dexterous_developer_cli --serve-only命令
  • 在目标机上运行dexterous_developer_runner --server http://*.*.*.*:4321命令,最好在专用目录中运行

在不使用热重载的情况下运行或构建

要构建或运行不带热重载的应用程序版本,只需记住避免包含hot功能,因为它仅在可重载库内部工作!

灵感

最初的灵感来自DGriffin91的Ridiculous bevy热重载

Bevy版本支持

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

依赖关系

~35–51MB
~1M SLoC