#bevy #mesh #glyph #font #3d #true-type #tessellation

bevy_text_mesh

用于显示文本的bevy 3D文本网格生成器

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游戏开发

Download history 2/week @ 2024-03-08 2/week @ 2024-03-15 64/week @ 2024-03-29 15/week @ 2024-04-05

每月92次下载

MIT 许可证

2.5MB
564

bevy_text_mesh   构建状态 最新版本 文档版本

用于在3D场景中显示文本的bevy 3D文本网格生成器插件

Example

文本网格在运行时从运行时镶嵌(并缓存)的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