#zip #assets #bevy #io #zip-archive

bevy_assetio_zip

Bevy AssetIO插件,可以加载可选加密的zip文件中的资源

1个不稳定版本

0.1.0 2021年2月4日

#46 in #资源

自定义许可证

39KB
142

这是一个Bevy AssetIo实现,允许从可选加密的zip资产包中读取。使用bevy_assetio_zip_bundler包,你还可以在build.rs脚本中自动将你的资源打包成所需的格式。

使用方法

只需在设置Bevy应用程序时启用插件即可启用从资产包文件中加载。

App::build()
    // Any config must be inserted before adding plugins. This is optional.
    .add_resource(AssetIoZipConfig {
        // The name of the asset bundle file, excluding the extension, to load
        file_name: "assets".into(), // This is the default
    })
    // Add the default plugins
    .add_plugins_with(DefaultPlugins, |group| {
        // With our additinoal asset IO plugin
        group.add_before::<bevy::asset::AssetPlugin, _>(AssetIoZipPlugin)
    })
    .run();

启用插件后,游戏现在在尝试加载资源时将搜索可执行文件旁边的assets.zipassets.bin文件。如果zip文件中找不到资源,它将尝试使用目标平台默认的Bevy资源加载器加载资源。

资产包类型

此插件支持两种类型的资产包文件,普通的.zip文件和加密的zip文件(扩展名为.bin)。普通的.zip文件是典型的zip文件,可以用普通的zip软件创建。加密的zip文件可以使用bevy_assetio_zip_bundler创建,它只是一个经过字节XOR(0b01010101)处理的普通zip文件。

⚠️ 警告:加密的zip文件并不提供对您资源的真正安全或保护。即使它被加密,解密资产包也是微不足道的。zip的加密只是防止普通用户立即检查数据的措施。

资源打包

要打包您的Bevy资源,您可以使用bevy_assetio_zip_bundler包。最简单的方法是将以下内容添加到您的build.rs文件中

fn main() {
    bevy_assetio_zip_bundler::bundle_crate_assets();
}

在编译发布版本时,此功能将自动将您的crate的assets文件夹压缩,并将其放入您的target/目录。在分发应用程序时,只需将您的资源包放置在可执行文件旁边,Bevy将尝试从包中加载资源,如果失败,则回退到assets目录。

您可以通过在Cargo.toml文件旁边创建一个asset_config.toml文件来配置包的名称、混淆和压缩。

# Bundle assets even for debug builds
bundle-for-debug-builds = true # Default: false

# Obfuscate assets. This doesn't protect from reverse-engineering, but it makes it a little harder
# for the average user to read them.
obfuscate = true # Default: false

# Compress the asset bundle using Bzip2 compression. Other options are "deflate" and "none".
compression = "bzip2" # Default: "bzip2"

# The name of the file, not counting the exention, which will be different based on the `obfuscate`
# setting. Obfuscated bundles will end in `.bin` and non-obfuscated bundles will end in `.zip`.
file-name = "assets" # Default: "assets"

# Set the directory that asset bundle should be placed.
out-dir = "../target" # Default "./target"

或者,如果您想创建自己的工具或自定义资源打包过程,可以使用bevy_assetio_zip_bundler::bundle_assets函数手动打包资源。

Bevy 版本

每个插件版本的Bevy支持版本

Bevy 版本 插件版本
0.4 0.1
master 0.1,具有bevy-unstable特性(见下文)

使用Bevy master

您可以通过向Cargo.toml添加补丁,并为此crate添加bevy-unstable特性,使用此crate与Bevy master一起使用

[dependencies]
# Bevy version must be set to "0.4" and we will
# override it in the patch below.
bevy = "0.4"
bevy_assetio_zip = { version = "0.1", features = ["bevy-unstable"] }

[patch.crates-io]
bevy = { git = "https://github.com/bevyengine/bevy.git" }

请注意,由于Bevy master可能会或可能不会引入破坏性API更改,此crate在使用bevy-unstable特性时可能无法编译。

许可证

此crate根据Katharos许可证许可,该许可证对您可以使用它的目的施加某些限制。在使用此crate用于您的项目之前,请阅读并理解条款。

依赖项

~17–27MB
~401K SLoC