3个版本
0.1.2 | 2023年4月1日 |
---|---|
0.1.1 | 2023年4月1日 |
0.1.0 | 2023年4月1日 |
#1713 in 过程宏
每月102次下载
在5个包中使用 (直接使用3个)
9KB
77 行
bevy_fn_plugin
从简单的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_plugin
、App::is_plugin_added
和相关的插件 API。
相比之下,bevy_fn_plugin
确实创建了完整的 Bevy Plugin
。如果您正在编写库,生成的插件可以在您的公共 API 中公开,而无需您的用户依赖于 bevy_fn_plugin
。
许可证
bevy_fn_plugin
在 MIT 或 Apache 2.0 许可证下双许可。
依赖关系
~305–760KB
~18K SLoC