#assets #bevy #gamedev

seldom_singleton

包含句柄的资源时的辅助 SystemParam

2个不稳定版本

0.2.0 2024年7月10日
0.1.0 2024年4月16日

#1665 in 游戏开发

Download history 169/week @ 2024-04-16 5/week @ 2024-05-21 20/week @ 2024-05-28 1/week @ 2024-06-18 131/week @ 2024-07-09 1/week @ 2024-07-16 4/week @ 2024-07-23

136 每月下载

MIT/Apache

7KB
59

seldom_singleton

Crates.io MIT/Apache 2.0 Crates.io

seldom_singleton 为包含句柄的资源添加了一个辅助 SystemParam。如果您正在使用Bevy的资产系统,例如,加载游戏中项目的列表及其属性,您最终会在资源中获得一个句柄,并且您需要获取 Res<Assets<MyItems>> 来获取所需的资产。此crate添加了一个辅助工具,让您无需额外的系统参数。

这是一个非常小的crate。您可以直接将源代码复制到您的项目中以避免添加依赖项。

之前

#[derive(Asset, TypePath)]
struct MyAsset;

#[derive(Resource, Deref)]
struct MySingleton(Handle<MyAsset>);

fn my_system(my_assets: Res<Assets<MyAsset>>, my_singleton: Res<MySingleton>) {
    // Return if the asset doesn't exist
    let Some(my_asset) = my_assets.get(&**my_singleton) else {
        return;
    };

    // or panic
    let my_asset = my_assets.get(&**my_singleton).unwrap();
}

之后

#[derive(Asset, TypePath)]
struct MyAsset;

// Your resource. Add it to the world yourself.
#[derive(Resource, Deref)]
struct MySingleton(Handle<MyAsset>);

// `AssetSingleton` is this crate's `SystemParam`. This type definition can help reduce boilerplate
// a bit, but it's optional. There's also `AssetSingletonMut`.
type MySingletonParam<'w> = AssetSingleton<'w, MySingleton>;

fn my_system(my_singleton: MySingletonParam) {
    // Return if the asset doesn't exist
    let Some(my_asset) = my_singleton.get() else {
        return;
    };

    // or panic
    let my_asset = my_singleton.unwrap();

    // `AssetSingletonMut` has `get_mut` and `unwrap_mut`
}

用法

添加到您的 Cargo.toml

# Replace * with your desired version

[dependencies]
seldom_singleton = "*"

兼容性

Bevy seldom_singleton
0.14 0.2
0.13 0.1

许可

seldom_singleton 可以选择在MIT和Apache 2.0下双许可。

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据Apache-2.0许可定义,将按上述方式双许可,不附加任何额外条款或条件。

依赖

~22–56MB
~1M SLoC