#bevy-ui #alert #ui #bevy #gamedev #game

bevy_ui_mod_alerts

创建类似小弹出窗口的UI

3个不稳定版本

0.2.0 2024年7月15日
0.1.1 2024年7月1日
0.1.0 2024年7月1日

#1947游戏开发

Download history 290/week @ 2024-07-01 124/week @ 2024-07-15 1/week @ 2024-07-22 47/week @ 2024-07-29

每月185次下载
用于 bevy_anyhow_alert

MIT/Apache

32KB
559

bevy_ui_mod_alerts

Crates.io Docs

这是一个简单的实现,通过一个名为 Alert 的组件来表示一个 "toast" UI元素。通过调用 Alert::bundle 构造函数来构建一个 AlertBundle,或者将返回 Vec<String> 的系统管道到 AlertsPlugin::alert 函数,将生成一个toast UI节点(如果指定了生命周期,最终会消失)。

更多示例请参阅。


lib.rs:

bevy_ui_mod_alerts 提供了一个类似 "toast" 的警告UI,可以用来通过便捷的UI来帮助管理错误。

可以通过直接使用 AlertBundleAlert::bundle 来生成警告,或者通过将警告消息的 Vec<String> 管道到 AlertsPlugin::alert 系统中来生成警告。

示例

此示例将一些任意系统管道到 AlertsPlugin::alert 系统中

use bevy::prelude::*;
use bevy_ui_mod_alerts::{AlertsPlugin};

fn main() {
    let mut app = App::new();
    app.add_plugins(MinimalPlugins);
    app.add_plugins(AlertsPlugin::new());
    app.add_systems(Update, do_stuff_and_maybe_alert.pipe(AlertsPlugin::alert));
    // app.run();
}

#[derive(Component)]
struct MyComponent;

fn do_stuff_and_maybe_alert(my_query: Query<&MyComponent>) -> Vec<String> {
    vec![]
}

生成的UI可以重新设计样式,但可能不适合每个应用程序。用户可以使用 AlertElements 资源来重新设计警告

use bevy::prelude::*;
use bevy_ui_mod_alerts::{AlertMarker, AlertElements};

let mut app = App::new();
// ...
app.insert_resource(AlertElements::<AlertMarker> {
    // root: NodeBundle
    // alert: NodeBundle
    // header: NodeBundle
    // body: NodeBundle
    // text: TextStyle
    ..Default::default()
});

或者从默认样式进行微调

use bevy::prelude::Color;
use bevy::color::palettes;
use bevy_ui_mod_alerts::AlertElements;
let mut elements = AlertElements::new();
elements.header.background_color.0 = Color::Srgba(palettes::css::GREEN);

...但这样做并不太方便。

此外,如果用户想要同时存在多个不同的警告样式,可以将类型参数 M 设置为自定义组件。通常使用默认的 AlertMarker

use bevy::prelude::*;
use bevy_ui_mod_alerts::AlertsPlugin;

#[derive(Component, Default, Reflect)]
struct MyAlert;

let mut app = App::new();
app.add_plugins(AlertsPlugin::<MyAlert>::default());
app.add_systems(Update, (|| { vec![] }).pipe(AlertsPlugin::<MyAlert>::custom_alert));

依赖项

~38–74MB
~1.5M SLoC