本页目录

Bevy 2D 形状绘制插件(bevy_prototype_lyon)

bevy_prototype_lyon · rparrett/bevy_prototype_lyon

一个用 Rust 编写的 Bevy 插件,用于绘制三角形、圆形、矩形、线段、圆弧和贝塞尔曲线等 2D 形状与路径。据 README 说明,它通过 lyon 生成自定义网格,并以 Bevy 的 Mesh2d 变体完成渲染,以弥补 Bevy 目前不便于直接绘制自定义形状的不...

其他 自研引擎 JavaScript 物理系统 粒子系统 动画系统 音频系统 中级
★ Stars 815 Forks 108 License Apache-2.0 更新 2026-11-10

国内开发环境适配

Windows
未知
Linux
未知
macOS
未知
引擎 / 框架:自研引擎 暂无中文教程标记 未标记站长实测
依赖通过 crates.io 获取,国内网络可能需要配置 Rust 镜像源(如 rsproxy / 中科大源)以加速下载;Bevy 依赖树较大,首次编译耗时较长、磁盘占用较高,建议预留足够空间;README 未对国内环境作特别说明,具体情况待核验。

中文项目介绍

bevy_prototype_lyon 是一个面向 Bevy 引擎的 Rust 插件,目标是让 Bevy 用户能够直接绘制 2D 形状与路径。根据 README 的说明,它可以绘制三角形、圆形、矩形、线段、圆弧(arcs)以及贝塞尔曲线(beziers)等图形,填补了 Bevy 在「便捷绘制自定义形状」方面的空白。

项目的标题相当直白——「Bevy + Lyon = ❤」,即把 Bevy 的渲染体系与 lyon 的几何三角剖分能力组合起来。README 顶部提供了 crates.io 版本、许可证、下载量、GitHub Stars 与 CI 状态徽章,并附有一个在线演示链接和一张正多边形示例图。

需要说明的是,本仓库的名称带有 prototype 字样,且 README 未对其稳定性、性能表现作出任何承诺;本文内容均以 README 中明确写出的信息为准。

补充说明

工作原理

README 用一节「How does it work?」解释了实现思路:

  • 当前 Bevy 并不支持以简单直接的方式绘制自定义形状;
  • 该 crate 使用 Bevy Mesh2d 的一种变体,配合自定义网格来绘制形状;
  • 这些自定义网格由 lyon crate 生成(README 指向的是 lyon_tessellation 文档)。

也就是说,bevy_prototype_lyon 本身并不实现一套独立的 2D 光栅化或 GPU 渲染管线,而是承担「形状描述 → 网格数据 → Bevy 网格组件」这一层的转换工作,最终仍交给 Bevy 既有的 2D 渲染路径完成绘制。

使用方法

README 给出了最小可运行的使用流程。第一步是把依赖加入 Cargo 项目:

cargo add bevy_prototype_lyon

第二步是在 App 中注册 ShapePlugin,随后即可通过 ShapeBuilder 构造带填充与描边的形状。README 中的示例创建了一个六边形正多边形(shapes::RegularPolygon,通过 RegularPolygonFeature::Radius(200.0) 指定半径),并使用深青色填充(DARK_CYAN)与 10 像素宽的黑色描边(stroke((BLACK, 10.0))):

fn setup_system(mut commands: Commands) {
    let shape = shapes::RegularPolygon {
        sides: 6,
        feature: shapes::RegularPolygonFeature::Radius(200.0),
        ..shapes::RegularPolygon::default()
    };

    commands.spawn((Camera2d, Msaa::Sample4));
    commands.spawn(
        ShapeBuilder::with(&shape)
            .fill(DARK_CYAN)
            .stroke((BLACK, 10.0))
            .build(),
    );
}

从示例可以看到几个关键用法要点:

  • 需要同时添加 DefaultPlugins 与 ShapePlugin;
  • 形状以数据描述(shapes::* 结构体)的形式定义,再交由 ShapeBuilder 组装;
  • ShapeBuilder 提供 fill 与 stroke 两类外观设置,其中描边接受「颜色 + 宽度」形式的元组;
  • 最终通过 commands.spawn 作为实体生成,符合 Bevy 的 ECS 使用习惯;
  • 示例中还生成了 Camera2d 并设置了 Msaa::Sample4 抗锯齿采样。

README 明确建议读者进一步查看仓库 examples 目录下的示例来了解更多用法,但没有在正文中逐一列举 API。

支持的 Bevy 版本

README 中的「Bevy versions supported」一节说明了维护策略:作者尽量支持 Bevy 的最新版本,一旦 Bevy 发布新版本,对旧版本的支持即被放弃(即只保留与最新 Bevy 对应的一版插件)。README 附有对照表,例如:

bevy bevy_prototype_lyon 许可证
0.20 0.18 MIT/Apache 2.0
0.19 0.17 MIT/Apache 2.0
0.18 0.16 MIT/Apache 2.0
0.17 0.15 MIT/Apache 2.0
0.16 0.14 MIT/Apache 2.0
0.15 0.13 MIT/Apache 2.0
0.14 0.12 MIT/Apache 2.0
0.5 0.3 MIT

由此可知:插件版本号与 Bevy 版本号并不同步,接入项目时需要按表格选择匹配的组合;较早期(Bevy 0.5 及以前)的许可证为单一 MIT,之后改为 MIT/Apache 2.0 双许可。

示例与演示

  • 在线演示:README 提供了「Try out the live demo!」链接,指向 nilirad.github.io 上的 showcase 页面,可直接在浏览器中体验形状绘制效果。
  • 示例图:仓库 docs 目录下有一张正多边形演示图(polygon_demo.webp)。
  • 代码示例:仓库 examples 目录,README 建议读者前往查看。
  • 该 crate 同时发布在 crates.io 上,可按名称检索到版本、下载量与许可证信息。

学习建议

结合 README 信息,这个项目更适合已经对 Bevy 有基本认识、并希望补上「程序化 2D 图形绘制」能力的 Rust 开发者:

  1. 先按「Usage」一节跑通最小示例,理解 ShapePlugin 的注册位置、ShapeBuilder 的链式调用以及 fill / stroke 的区别。
  2. 再对照 Bevy 版本对照表确认依赖版本,避免因版本错配导致编译失败。
  3. 阅读 examples 目录中的示例,理解 README 提到的各类形状(三角形、圆形、矩形、线段、圆弧、贝塞尔曲线)的具体构造方式。
  4. 若想弄清底层机制,可结合 README 指向的 lyon_tessellation 文档,理解网格是如何由几何路径生成的。

需要注意,README 未涉及性能基准、动画、物理或交互等内容,上述方向需自行探索验证。

开源许可证与版权说明

许可证标识:Apache-2.0。源码、资源与依赖许可可能不同,请以官方仓库为准。本站仅做索引,不托管源码。

相似项目