#bevy-ecs #tile #tilemap #rendering #layer #maps #entity

bevy_ecs_tilemap

为bevy提供的瓦片地图渲染插件,每个瓦片对应一个实体,更符合ECS的设计。

12个重大版本更新

0.14.0 2024年7月18日
0.12.0 2024年2月11日
0.11.1 2023年10月15日
0.11.0 2023年7月23日
0.4.0 2021年5月27日

#16 in 游戏开发

Download history 678/week @ 2024-05-05 578/week @ 2024-05-12 639/week @ 2024-05-19 547/week @ 2024-05-26 679/week @ 2024-06-02 377/week @ 2024-06-09 593/week @ 2024-06-16 550/week @ 2024-06-23 203/week @ 2024-06-30 314/week @ 2024-07-07 727/week @ 2024-07-14 1035/week @ 2024-07-21 812/week @ 2024-07-28 625/week @ 2024-08-04 925/week @ 2024-08-11 510/week @ 2024-08-18

2,998 每月下载量
用于 5 crates

MIT 许可证

265KB
6K SLoC

bevy_ecs_tilemap

Crates.io docs license Crates.io

bevy的瓦片地图渲染插件。由于其将瓦片作为实体处理,因此更符合ECS的设计。

特性

  • 每个实体一个瓦片。
  • 使用分块方法进行快速渲染。
  • 图层和稀疏瓦片地图。
  • GPU加速动画。
  • 等距和六边形瓦片地图。
  • 与Tiled和LDTK编辑器集成的示例。

截图

iso hex

它是如何工作的?

很简单,每个实体都有一个瓦片。在幕后,瓦片被分割成块,每个块都有自己的网格,以最佳方式发送到GPU。

为什么使用这个而不是X?

因为每个瓦片都是独立的实体,编辑瓦片变得非常简单方便。这允许您为实体添加标签以进行更新,使动画等操作更容易。想要有一个采矿模拟,其中对瓦片施加伤害?使用此插件很容易。

struct Damage {
    amount: u32,
}

fn update_damage(
    mut query: Query<(&mut TileTexture, &Damage), Changed<Damage>>,
) {
    for (mut tile_texture, damage) in query.iter_mut() {
        tile_texture.0 = TILE_DAMAGE_OFFSET + damage.amount;
    }
}

示例

  • accessing_tiles – 示例展示了如何通过使用瓦片地图坐标从地图对象访问瓦片。
  • animation – 基本的CPU动画示例。
  • basic - 创建瓦片地图的最简单示例。
  • bench - 地图渲染系统的压力测试。加载需要一些时间。
  • chunking - 一个简单的示例,展示了如何通过生成多个块来实现无限瓦片地图。
  • colors - 展示了每个瓦片可以具有独立颜色。
  • frustum_cull_test - 一个用于测试视锥剔除的环境。
  • game_of_life - 生命游戏模拟器。
  • hexagon_column - 使用“尖角”六边形进行网格化的地图。
  • hexagon_generation - 展示如何生成六边形地图。
  • hexagon_row - 使用平面六边形进行网格化的地图。
  • iso_diamond - 使用菱形排序进行等距网格化的地图。
  • iso_staggered - 使用交错排序进行等距网格化的地图。
  • layers - 展示如何使用多个地图实体/组件来创建“层”。
  • ldtk - 加载和渲染LDTK地图的示例。我们建议查看bevy_ecs_ldtk(https://crates.io/crates/bevy_ecs_ldtk)。
  • mouse_to_tile - 展示如何将鼠标光标位置转换为瓦片位置。
  • move_tile - 展示如何移动瓦片而不销毁和重生它。
  • random_map - 每100毫秒编辑所有瓦片的基准。
  • remove_tiles - 展示如何使用map_query通过示例移除瓦片。
  • spacing - 展示如何加载包含瓦片之间间距的瓦片地图纹理。
  • tiled - 加载和渲染Tiled编辑器地图的示例。
  • tiled_rotated - 加载和渲染带有翻转和旋转的Tiled编辑器地图的示例。
  • visibility - 展示瓦片和块可见性的示例。

运行示例

cargo run --release --example basic

在网页上运行示例

这可以通过wasm-server-runner变得简单。

安装和配置完成后,运行

WebGL2

cargo run --target wasm32-unknown-unknown --example animation --release --features atlas,bevy/webgl2

注意:当针对WebGL2进行Web开发时,必须使用atlas功能。请参阅#283

WebGPU

WebGPU目前还没有被许多浏览器很好地支持

RUSTFLAGS=--cfg=web_sys_unstable_apis cargo run --example animation --target=wasm32-unknown-unknown

Bevy兼容性

bevy bevy_ecs_tilemap
main bevy-track
0.12 0.12
0.11 0.11.*
0.10 0.10
0.9 0.9
0.8 0.8
0.8 0.7
0.7 0.6
0.6 0.5

资产来源

依赖关系

~37–73MB
~1.5M SLoC