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 游戏开发
1,028每月下载量
30KB
497 行
bevy_pkv
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::Serialize
和 Deserialize
的自定义类型
#[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}
实现细节
本地
redb
和 rmp_serde
(MessagePack) 用于存储。它在系统的适当应用程序数据目录中创建了一个 bevy_pkv.redb
数据库。
或者,禁用默认功能并启用 rocksdb
功能以使用基于RocksDB的实现,或启用 sled
功能以使用sled数据库。
WebAssembly
Window.localStorage
和 serde_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