7个版本 (4个破坏性更新)
0.5.0 | 2022年4月17日 |
---|---|
0.4.1 | 2022年2月17日 |
0.3.0 | 2022年2月7日 |
0.2.0 | 2022年1月17日 |
0.1.2 | 2022年1月16日 |
#1781 in 游戏开发
38KB
669 行
Bevy-Embasset
将资源文件夹嵌入到二进制文件中。
bevy-embasset
增加了从二进制文件中加载资源的支持。
此外,它可以选择先尝试通过默认的AssetPlugin
加载资源,从而允许在出现问题时将嵌入的资源用作后备。
作为甜点,bevy-embasset
允许注册多个其他AssetServer
,这些服务器将用于以特定可配置字符串开头的资源路径。这可以用于使一些资源从例如网络服务加载,而其他资源则从磁盘加载或嵌入到二进制文件中。它还可以用于例如构建1个或多个子crates,每个crates都使用EmbassetIo
并包含一组资源 - 因此在编译时节省时间,因为资源不需要每次都编译(这种方法的例子可以在游戏bevoids
中找到)。
用法
推荐
添加带有一些资源的枚举、处理这些资源的AssetIo
以及可以处理所有加载/路由的EmbassetIo
的简单方法是
use bevy::{prelude::*, asset::AssetPlugin};
use bevy_embasset::{EmbassetPlugin, embasset_assets};
embasset_assets!(
pub enum GameAssets {
#[doc = "It's possible to document each enum variant"]
Icon = "icon.png",
BackgroundMusic = "sounds/bg.wav"
},
pub struct GameAssetsIo {
root = "../assets/"
}
);
fn main() {
App::new().add_plugins_with(DefaultPlugins, |group| {
group.add_before::<AssetPlugin, _>(EmbassetPlugin::new(|io| {
io.add_handler(GameAssetsIo::new().into());
}))
});
}
注意,在上面的例子中,GameAssets
和GameAssetsIo
(由宏定义)可以移动到单独的crates中 - 节省编译时间。
定义的GameAssets
实现了几个有用的标准特性:Eq
、Ord
、Hash
、Copy
。它可以通过调用GameAssets::iter()
进行迭代,资源数量在GameAssets::COUNT
中可用。
通过添加的EmbassetPlugin
加载资源的路径可以通过例如GameAssets::Icon.path()
检索。
fn some_asset_loading_system(asset_server: &AssetServer) {
let icon : Handle<Image> = asset_server.load(GameAssets::Icon.path());
}
使用build.rs
,无需识别枚举
use bevy::{prelude::*, asset::AssetPlugin};
use bevy_embasset::AddEmbassetPlugin;
```rust
use bevy::{prelude::*, asset::AssetPlugin};
use bevy_embasset::EmbassetPlugin;
fn main() {
App::new().add_plugins_with(DefaultPlugins, |group| {
group.add_before::<AssetPlugin, _>(EmbassetPlugin::new(add_embasset_assets))
});
}
从构建脚本(build.rs
)生成add_embasset_assets
函数
use std::{env, path::Path};
fn main() {
// Do this to include all files in the asset folder:
bevy_embasset::include_all_assets(
&Path::new(&env::var("CARGO_MANIFEST_DIR").unwrap()).join("assets"),
);
}
并将其包含在源文件中
include!(concat!(env!("OUT_DIR"), "/add_embasset_assets.rs"));
对于构建脚本,需要在 Cargo.toml
中启用 build
功能
[build-dependencies]
bevy-embasset = { version = "*", features = ["build"] }
Bevy 兼容性
bevy-embasset | Bevy |
---|---|
main | 0.6 |
依赖项
~17–34MB
~533K SLoC