12个版本 (破坏性更新)

0.11.1 2024年8月2日
0.11.0 2024年7月10日
0.10.0 2024年3月3日
0.9.0 2023年11月6日
0.5.0 2022年5月11日

#528 in 游戏开发

Download history 349/week @ 2024-04-28 117/week @ 2024-05-05 95/week @ 2024-05-12 233/week @ 2024-05-19 209/week @ 2024-05-26 163/week @ 2024-06-02 153/week @ 2024-06-09 161/week @ 2024-06-16 182/week @ 2024-06-23 58/week @ 2024-06-30 259/week @ 2024-07-07 58/week @ 2024-07-14 105/week @ 2024-07-21 401/week @ 2024-07-28 278/week @ 2024-08-04 234/week @ 2024-08-11

1,028每月下载量

MIT/Apache

30KB
497

bevy_pkv

crates.io MIT/Apache 2.0 docs.rs ci

bevy_pkv 是一个用于Rust应用的跨平台持久化键值存储。

用于存储设置、保存游戏等内容。

目前,Bevy依赖项是可选的,因此它也可以用于其他游戏和应用。

与Bevy的使用

将存储资源添加到您的应用中

# #[cfg(feature = "bevy")] { // ignore this line
use bevy::prelude::*;
use bevy_pkv::PkvStore;

fn main() {
App::new()
    .add_plugins(DefaultPlugins)
    .insert_resource(PkvStore::new("FooCompany", "BarGame"))
    // ...insert systems etc.
    .run();
}
# }

这将创建或加载系统适当位置的存储,并将其提供给Bevy系统

fn setup(mut pkv: ResMut<PkvStore>) {
    if let Ok(username) = pkv.get::<String>("username") {
        info!("Welcome back {username}");
    } else {
        pkv.set_string("username", "alice")
            .expect("failed to store username");

        // alternatively, using the slightly less efficient generic api:
        pkv.set("username", &"alice".to_string())
            .expect("failed to store username");
    }
}

使用实现 serde::SerializeDeserialize 的自定义类型

#[derive(Serialize, Deserialize)]
struct User {
    name: String,
}

fn setup(mut pkv: ResMut<PkvStore>) {
    if let Ok(user) = pkv.get::<User>("user") {
        info!("Welcome back {}", user.name);
    } else {
        let user = User {
            name: "bob".to_string(),
        };
        pkv.set("user", &user).expect("failed to store user");
    }
}

请参阅示例以获取更多用法

不与Bevy一起使用

添加依赖项时禁用默认功能

bevy_pkv = {version = "0.9", default-features = false}

实现细节

本地

redbrmp_serde (MessagePack) 用于存储。它在系统的适当应用程序数据目录中创建了一个 bevy_pkv.redb 数据库。

或者,禁用默认功能并启用 rocksdb 功能以使用基于RocksDB的实现,或启用 sled 功能以使用sled数据库。

WebAssembly

Window.localStorageserde_json 用于存储。也许IndexedDb和其他选择会更好,但它的API很复杂,我希望有一个简单的实现和简单的同步API。

Bevy版本支持

main 分支针对最新的Bevy版本。

bevy bevy_pkv
0.14 0.11, main
0.13 0.10
0.12 0.9
0.11 0.8
0.10 0.7
0.9 0.6
0.8 0.5
0.7 0.2, 0.3, 0.4
0.6 0.1

许可证

MIT 或 Apache-2.0

依赖项

~0.4–16MB
~215K SLoC