13个版本 (破坏性)

0.14.0 2024年7月28日
0.12.0 2023年11月5日
0.11.0 2023年7月12日
0.9.0 2023年1月17日
0.3.0 2021年4月7日

#107 in 游戏开发

Download history 14/week @ 2024-04-28 2/week @ 2024-05-05 4/week @ 2024-05-12 11/week @ 2024-05-19 1/week @ 2024-05-26 15/week @ 2024-06-02 7/week @ 2024-06-09 14/week @ 2024-06-16 7/week @ 2024-06-23 9/week @ 2024-07-07 164/week @ 2024-07-28 25/week @ 2024-08-04 7/week @ 2024-08-11

每月196次下载
kayak_ui 中使用

MIT/Apache

57KB
1K SLoC

bevy_svg

Crates.io license

在我的一个个人项目中,我需要一种在Bevy中加载和显示一些简单的SVG文件/形状的方法,所以我从bevy_prototype_lyon中获得了灵感,并对其进行修改和扩展,以便加载和显示简单的SVG文件。SVG可以用于/显示在2D以及3D中。

文件通过AssetLoader加载,然后使用usvg进行解析和简化,然后使用Lyon进行细分,最后转换为Bevy网格,并使用自定义着色器绘制。

注意:当前的SVG支持相对较简单,我将来希望扩展这一功能。

兼容性

Bevy版本 bevy_svg版本 分支
Crates.io Crates.io bevy-0.14
Crates.io Crates.io bevy-0.12
Crates.io Crates.io main
旧版本
Bevy版本 bevy_svg版本 分支
Crates.io Crates.io bevy-0.11
Crates.io Crates.io bevy-0.10
Crates.io Crates.io bevy-0.9
Crates.io Crates.io bevy-0.8
Crates.io Crates.io bevy-0.7
Crates.io Crates.io bevy-0.6
Crates.io Crates.io bevy-0.5

示例

复杂形状 多种颜色 字体
complex_one_color two_colors twinkle

使用方法

将以下内容复制到您的Cargo.toml

# Stable
bevy_svg = "0.14.0"

# 2D and 3D are available on default, if you only want/need one, use the following
bevy_svg = { version = "0.14.0", default-features = false, features = ["2d"] }
# or
bevy_svg = { version = "0.14.0", default-features = false, features = ["3d"] }

# Living on the edge (at your own risk 😅)
bevy_svg = { git = "https://github.com/Weasy666/bevy_svg", branch = "main" }

然后像这样使用。

2D

use bevy_svg::prelude::*;

fn main() {
    App::new()
        .insert_resource(Msaa::Sample4)
        .add_plugins(DefaultPlugins.set(WindowPlugin {
            primary_window: Some(Window {
                title: "SVG Plugin".to_string(),
                ..Default::default()
            }),
            ..Default::default()
        }))
        .add_plugin(bevy_svg::prelude::SvgPlugin)
        .add_systems(Startup, setup)
        .run();
}

fn setup(
    mut commands: Commands,
    asset_server: Res<AssetServer>,
) {
    let svg = asset_server.load("path/to/file.svg");
    commands.spawn(Camera2dBundle::default());
    commands.spawn(Svg2dBundle {
        svg,
        origin: Origin::Center, // Origin::TopLeft is the default
        ..Default::default()
    });
}

3D

use bevy_svg::prelude::*;

fn main() {
    App::new()
        .insert_resource(Msaa::Sample4)
        .add_plugins(DefaultPlugins.set(WindowPlugin {
            primary_window: Some(Window {
                title: "SVG Plugin".to_string(),
                ..Default::default()
            }),
            ..Default::default()
        }))
        .add_plugin(bevy_svg::prelude::SvgPlugin)
        .add_systems(Startup, setup)
        .run();
}

fn setup(
    mut commands: Commands,
    asset_server: Res<AssetServer>,
) {
    let svg = asset_server.load("path/to/file.svg");
    commands.spawn(Camera3dBundle::default());
    commands.spawn(Svg3dBundle {
        svg,
        origin: Origin::Center, // Origin::TopLeft is the default
        transform: Transform {
            translation: Vec3::new(0.0, 0.0, -600.0),
            // The scale you need depends a lot on your SVG and camera distance
            scale: Vec3::new(1.0, 1.0, 1.0),
            rotation: Quat::from_rotation_x(-std::f32::consts::PI / 5.0),
        },
        ..Default::default()
    });
}

许可证

bevy_svg根据您的选择,在以下两者中之一下进行许可

依赖项

~39–76MB
~1.5M SLoC