11 个版本 (破坏性更新)
0.9.0 | 2023年11月21日 |
---|---|
0.6.0 | 2023年4月11日 |
0.5.0 | 2022年11月13日 |
0.2.0 | 2022年4月17日 |
0.0.1 | 2021年7月30日 |
556 在 游戏开发
每月92次下载
2.5MB
564 行
bevy_text_mesh
用于在3D场景中显示文本的bevy 3D文本网格生成器插件
文本网格在运行时从运行时镶嵌(并缓存)的TrueType字体符号生成。符号的镶嵌使用基于C的github.com/fetisov/ttf2mesh库进行,该库通过基于Rust的FFI API进行接口(参见ttf2glyph-rs)。
已知限制
请将其视为插件的预览,以收集关于API的反馈
- API将在未来发生变化 - 仍在迭代中
- 尚未实现多个
TextMesh
配置字段,请参阅以下示例 - 尚未实现文本颜色更新
- 字符间距不正确
- 未实现网格缓存清除 - 此实现将泄露内存(请参阅#2)
- 不支持WASM构建(请参阅#11)
支持的Bevy版本表
bevy | bevy_text_mesh |
---|---|
0.12 | 0.9.0 |
0.11 | 0.7.0 |
0.10 | 0.6.0 |
0.9 | 0.5.0 |
0.8 | 0.4.0 |
0.7 | 0.2.0 |
0.6 | 0.1.0 |
0.5 | 0.0.2 |
使用方法
先决条件
先决条件(编译ttf2mesh-rs)
apt-get install build-essential patch
运行示例
请参阅examples 文件夹。
git clone https://github.com/blaind/bevy_text_mesh.git
cd bevy_text_mesh
cargo run --example 3d_scene --release # or
cargo run --example performance --release
集成到您的Bevy应用中
添加到Cargo.toml
[dependencies]
bevy_text_mesh = "0.9.0"
包含库
use bevy_text_mesh::prelude::*;
其次,将一个 TextMeshPlugin
添加到您的应用中
App::new()
...
.add_plugins(TextMeshPlugin)
...;
然后,将所需的TrueType字体(后缀为 .ttf
)添加到您的资产文件夹中,一个良好的惯例是将它们存储在 assets/fonts
文件夹中。
例如,请参阅Fira字体。请阅读它们的 授权协议。
mkdir -p assets/fonts
wget https://github.com/mozilla/Fira/raw/master/ttf/FiraSans-Medium.ttf -O assets/fonts/FiraSans-Medium.ttf
接下来,您可以在场景中的系统处创建文本。
首先,加载一个字体资产。
let font: Handle<TextMeshFont> = asset_server.load("fonts/FiraSans-Medium.ttf#mesh");
然后,创建一个textmesh包。
commands.spawn(TextMeshBundle {
text_mesh: TextMesh::new_with_color("Hello Bevy", font, Color::rgb(1., 1., 0.)),
transform: Transform::from_xyz(-1., 1.75, 0.),
..Default::default()
});
或者使用扩展语法
commands.spawn(TextMeshBundle {
text_mesh: TextMesh {
text: String::from("Hello Bevy!"),
style: TextMeshStyle {
font,
font_size: SizeUnit::NonStandard(36.),
color: Color::rgb(1.0, 1.0, 0.0),
font_style: FontStyle::UPPERCASE, // only UPPERCASE & LOWERCASE implemented currently
mesh_quality: Quality::Low,
..Default::default()
},
alignment: TextMeshAlignment {
vertical: VerticalAlign::Top, // FUNCTIONALITY NOT IMPLEMENTED YET - NO EFFECT
horizontal: HorizontalAlign::Left, // FUNCTIONALITY NOT IMPLEMENTED YET - NO EFFECT
..Default::default()
},
size: TextMeshSize {
width: SizeUnit::NonStandard(135.), // partially implemented
height: SizeUnit::NonStandard(50.), // partially implemented
depth: Some(SizeUnit::NonStandard(50.0)), // must be > 0 currently, 2d mesh not supported yet
wrapping: true, // partially implemented
overflow: false, // NOT IMPLEMENTED YET
..Default::default()
},
..Default::default()
},
transform: Transform {
translation: Vec3::new(-1., 1.75, 0.),
..Default::default()
},
..Default::default()
});
授权
在 MIT授权协议 下授权
贡献
除非您明确声明,否则您提交的任何有意包含在软件中的贡献,均应按照上述条款授权,不附加任何额外条款或条件。
依赖项
~49–85MB
~1.5M SLoC