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 游戏开发
每月196次下载
在 kayak_ui 中使用
57KB
1K SLoC
bevy_svg
在我的一个个人项目中,我需要一种在Bevy
中加载和显示一些简单的SVG文件/形状的方法,所以我从bevy_prototype_lyon
中获得了灵感,并对其进行修改和扩展,以便加载和显示简单的SVG文件。SVG可以用于/显示在2D
以及3D
中。
文件通过AssetLoader
加载,然后使用usvg
进行解析和简化,然后使用Lyon
进行细分,最后转换为Bevy
网格,并使用自定义着色器绘制。
注意:当前的SVG支持相对较简单,我将来希望扩展这一功能。
兼容性
Bevy 版本 |
bevy_svg 版本 |
分支 |
---|---|---|
bevy-0.14 |
||
bevy-0.12 |
||
main |
示例
复杂形状 | 多种颜色 | 字体 |
---|---|---|
使用方法
将以下内容复制到您的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根据您的选择,在以下两者中之一下进行许可
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可 (LICENSE-MIT 或 https://choosealicense.com/licenses/mit)
依赖项
~39–76MB
~1.5M SLoC