#assets #bundled #bevy #inline #prototype #bevy-plugin #inline-assets

bevy_prototype_inline_assets

用于加载二进制文件中捆绑的资源的Bevy插件

2个版本

0.1.1 2020年11月5日
0.1.0 2020年11月5日

#1928游戏开发

每月下载 34

MIT 许可协议

8KB
112 代码行

Bevy捆绑资源

功能

  • 如果本地文件系统中存在,则使用本地文件系统中的资源进行开发,对于找不到的资源,则仅回退到捆绑资源。
  • 提供了一个易于使用的inline_assets!宏来捆绑资源(或可以直接使用API)。

状态

适用于Bevy 0.3.0。请参阅Bevy问题606和相关的PR以讨论对捆绑资源的本地Bevy支持。

安装

cargo add bevy_prototype_inline_assets

或者,在你的Cargo.toml

bevy_prototype_inline_assets = "0.1.0"

用法

use bevy::asset::{AssetPlugin, LoadState};
use bevy::prelude::*;
use bevy_prototype_inline_assets::{inline_assets, InlineAssets, InlineAssetsPlugin};
use std::collections::HashMap;
use std::path::Path;

fn main() {
    let inline_assets = inline_assets![
        "assets/image.png",
        "assets/font.ttf",
        "assets/audio.mp3",
        ...
    ];
    App::build()
        .add_resource(inline_assets)
        .add_plugins_with(DefaultPlugins, |group| {
            group.add_after::<AssetPlugin, _>(InlineAssetsPlugin)
        })
        .init_resource::<HashMap<&'static Path, HandleUntyped>>()
        .add_startup_system(setup.system())
        .add_system(spawn.system())
        .run();
}

fn setup(
    mut commands: Commands,
    inline_assets: Res<InlineAssets>,
    asset_server: Res<AssetServer>,
    mut inline_asset_handles: ResMut<HashMap<&'static Path, HandleUntyped>>,
) {
    *inline_asset_handles = inline_assets.load_all(asset_server);
}

fn spawn(
    mut commands: Commands,
    inline_asset_handles: Res<HashMap<&'static Path, HandleUntyped>>,
    asset_server: Res<AssetServer>,
    loaded: Local<bool>,
) {
    if *loaded
        || asset_server.get_group_load_state(inline_asset_handles.values().map(|h| h.id))
            != LoadState::Loaded
    {
        return;
    }
    let handle =
        inline_asset_handles.get(Path::new("assets/image.png")).unwrap().clone().typed();
    ...
}

依赖

~15MB
~320K SLoC