#assets #bevy #bevy-plugin #gamedev

covey_asset_loader

Bevy插件,用于资源加载

1个不稳定版本

0.1.1 2023年4月17日
0.1.0 2023年4月17日

#1989游戏开发

每月22次下载

MIT/Apache

2MB
207

Covey Asset Loader

这个Bevy插件试图解决状态资源依赖的问题。例如,你有

enum AppState {
    Splash,
    ..
}

struct SplashAssets { .. }

并且你想要确保在进入 Splash 之前 SplashAssets 是可用的,并且在退出 Splash 时清理 SplashAssets

使用方法

查看完整的基本示例。但总的来说,它是这样的

对您的 State 的要求

use covey_asset_loader::prelude::*; 

// implement AssetState
#[derive(AssetState, States, ..)]
enum AppState {     
    #[default]                 
    Boot,
    #[assets(SplashAssets)]
    Splash,
    #[assets(MainMenuAssets)]
    MainMenu,
    // no it doesn't support multiple assets
    // #[assets(InGameAssets1, InGameAssets2)]
    InGame,
}

对您的 Assets 的要求

// implement AssetCollection , Resource and Reflect
#[derive(AssetCollection, Resource, Reflect, ..)]
struct SplashAssets {
    #[asset(path = "fonts/FiraSans-Bold.ttf")]
    font1: Handle<Font>,
    #[asset(path = "audio/breakout_collision.ogg")]
    audio1: Handle<AudioSource>,
    #[asset(path = "images/icon.png")]
    image1: Handle<Image>,
}

可用方法

impl Plugin for SplashPlugin { 
    fn build(&self, app: &mut App) {
        app
            // Required, load SplashAssets for AppState
            .state_asset_loader::<SplashAssets, AppState>()
            // Optional, release SplashAssets when it exits AppState::Splash after `GlobalAssetCleanUpTimer` has finished, default is 5 seconds.
            .cleanup_assets_on_exit::<SplashAssets>(AppState::Splash)
            // Optional, if specified, will override `GlobalAssetCleanUpTimer` for this specific Resrouce, in this case, SplashAssets will be released after 2 seconds.
            .insert_resource(AssetCleanUpTimer::<SplashAssets>(
                Timer::from_seconds(2.0, TimerMode::Once),
                PhantomData,
            ))
    }
}

更改状态

遗憾的是,为了让它正常工作,你必须使用 ScheduleNextState 而不是 NextState 来更改状态。这不是一个特性,而是Bevy限制的一个解决方案。

fn system(
    mut schedule_state: ResMut<ScheduleNextState<AppState>>,
) {
    schedule_state.set(AppState::MainMenu);
}

依赖项

~19–57MB
~1M SLoC