#bevy-plugin #function #expose

bevy_fn_plugin

从函数创建Bevy插件

3个版本

0.1.2 2023年4月1日
0.1.1 2023年4月1日
0.1.0 2023年4月1日

#1713 in 过程宏

Download history 20/week @ 2024-03-11 7/week @ 2024-03-18 34/week @ 2024-03-25 107/week @ 2024-04-01 7/week @ 2024-04-08 9/week @ 2024-04-15 17/week @ 2024-04-22 4/week @ 2024-04-29 14/week @ 2024-05-06 17/week @ 2024-05-13 27/week @ 2024-05-20 23/week @ 2024-05-27 27/week @ 2024-06-03 27/week @ 2024-06-10 17/week @ 2024-06-17 31/week @ 2024-06-24

每月102次下载
5包中使用 (直接使用3个)

MIT/Apache

9KB
77

bevy_fn_plugin

Build Status Latest Version Documentation

从简单的Rust函数创建Bevy插件

简介

bevy_fn_plugin 允许您从简单的Rust函数创建 Bevy 插件。

它暴露了一个属性,#[bevy_plugin],可以应用于 fn 项,以将其转换为Bevy Plugin 类型。函数应接受单个 &mut App 参数,并可以执行任何常规Bevy插件可能执行的初始化逻辑。

用法

只需将 #[bevy_plugin] 添加到实现您插件逻辑的函数中

use bevy::prelude::*;
use bevy_fn_plugin::bevy_plugin;

#[bevy_plugin]
fn GameTitlePlugin(app: &mut App) {
    app.insert_resource(GameTitle("My Awesome Game".into()));
}

#[derive(Resource)]
struct GameTitle(String);

然后您可以将生成的 Plugin 添加到Bevy App 中,就像平常一样

fn main() {
    App::new()
        .add_plugin(GameTitlePlugin)
        .run();
}

兼容性

bevy_fn_plugin 已与Bevy 0.10进行测试。

然而,Bevy插件API现在已经非常稳定。应该可以使用该包与Bevy 0.9和0.8一起使用,甚至可能是更早的版本。

bevy_fn_plugin 不依赖于 bevy 本身。

限制

唯一插件

从Bevy 0.9开始,如果 Plugin::is_unique 方法返回 false(这不是默认值),则插件可以安装多次。

bevy_fn_plugin 不覆盖此方法,这意味着它生成的插件始终是唯一的。实际上这不应该成为问题,因为插件实例没有状态,因此应该是可互换的。

泛型函数

目前不支持泛型函数。这不是一个根本性的限制:泛型函数的支持将在未来的版本中添加。

常见问题解答

为什么函数使用驼峰命名法?

bevy_fn_plugin 将函数转换为实现 Plugin 特性的类型。由于 Rust 中的类型名称通常采用驼峰命名法,因此源函数的名称应遵循语言对类型的约定。

请注意,源函数实际上并不存在于最终代码中,因此其名称不会触发任何编译器警告。

它与 seldom_fn_plugin 库有何不同?

seldom_fn_plugin 库实际上并没有创建 Bevy Plugin 类型。相反,它将注解的函数直接应用于 Bevy App 对象。为了正常工作,它需要您导入自定义扩展特性,这阻止了使用 App::add_pluginApp::is_plugin_added 和相关的插件 API。

相比之下,bevy_fn_plugin 确实创建了完整的 Bevy Plugin。如果您正在编写库,生成的插件可以在您的公共 API 中公开,而无需您的用户依赖于 bevy_fn_plugin

许可证

bevy_fn_plugin 在 MIT 或 Apache 2.0 许可证下双许可。

依赖关系

~305–760KB
~18K SLoC