#level #ldtk #bevy #assets #layer #tile #ecs

bevy_ldtk_asset

一个用于加载LDtk级别和项目的库,作为Bevy资源

2个不稳定版本

0.2.0 2024年1月8日
0.1.0 2024年1月5日

#1167 in 游戏开发

MIT/Apache

3MB
1.5K SLoC

License

什么是Bevy LDtk加载器?

我正在开发Bevy LDtk加载器,作为一个将LDtk级别加载到Bevy游戏引擎中的工具!

有许多项目也旨在完成这项工作。

哲学

我的目标是创建一个库,让用户可以

  • 从LDtk项目文件中加载级别和/或实体实例,作为Bevy资源
  • 创建代表这些级别的ECS实体
  • 以简单和预期的方式显示到屏幕上
  • 提供挂钩,以便用户可以与这些元素一起工作

这个库不打算做什么

  • 定义诸如以下内容应该如何工作:-- 碰撞检测 -- 精灵动画 -- 拉伸背景 -- 游戏可能需要的任何其他逻辑

级别

级别将作为ECS实体加载,其平移设置为项目世界空间中的位置。它们将以以下顺序生成具有以下子ECS实体的ECS实体

  • 一个跨越级别坐标的网格,设置为LDtk背景颜色
  • 如果定义了,将包含背景图像的网格。这将根据LDtk级别定义进行裁剪和缩放
  • 为该级别实例定义的每个层

级别资源包含一个值字段,它是从LDtk项目读取的JSON数据的Rust表示

层将作为ECS实体加载,并附加其各自的视觉表示(按层类型)

瓦片层

瓦片层将包含一个 Handle<Image>,它引用其视觉内容。

实体层

实体层将包括在层中定义的所有实体实例作为子ECS实体。这些ECS实体将包括一个 LdtkEntityComponent,用户可以查询并对其做出反应。

如果定义了编辑器视觉,我们将尝试通过在主ECS实体的子代中生成精灵或MaterialMesh2d来渲染。我们不渲染形状或备用UI图标视觉,但如果您想自行渲染,这些信息将在值字段中提供。

正在工作

目前,用户可以将级别作为LDtk项目文件的标签资源加载。例如,在Bevy项目的典型启动系统中添加以下内容将添加定义的层和实体实例到世界中

    commands.spawn(LdtkLevelBundle {
        level: asset_server.load("ldtk/example.ldtk#Level_0"),
        ..default()
    });

LDtk 文件要求

随着时间的推移,我会尽最大努力包含 LDtk 的尽可能多的合适的功能。目前,LDtk 项目的这些要求已经实施

  • 多世界功能尚不支持
  • 外部关卡文件尚未完成
  • 需要在项目设置中选择“每层一个 PNG”或“每层一个 PNG,每级一个 PNG”选项
  • 只有“实体”和“瓦片”层被加载,其他层被静默忽略
  • 仅支持以下实体实例编辑器可视化类型:-- “拉伸到边界”-- “适应边界内”

许可证

在 MIT 和 Apache 许可证下发布,灵感来自 Bevy 团队。

入门指南

将 bevy_ldtk_asset 添加到您的 Config.toml 文件中,与 Bevy 一起。我们目前针对 Bevy 版本 0.12。

包含的资源

奇幻战斗包 寻宝猎人

依赖项

~23MB
~423K SLoC