9个版本 (破坏性更新)
0.8.0 | 2023年7月22日 |
---|---|
0.7.0 | 2023年4月12日 |
0.6.0 | 2022年11月14日 |
0.5.0 | 2022年9月26日 |
0.2.0 | 2022年1月6日 |
#2173 in 游戏开发
每月35次下载
在 2 个Crate中使用(通过 bevy_tileset)
93KB
2K SLoC
bevy_tileset
使用RON在Bevy中创建简单、可配置的瓦片集。
所有GIF都是由
bevy_tileset_map
crate生成的
📋 特性
- 通过RON文件定义瓦片集和瓦片
- 直接将瓦片集加载为Bevy资产
- 定义标准、动画、变体和自动瓦片
📲 安装
将以下一行添加到您的Cargo.toml
。
[dependencies]
bevy_tileset_tiles = "0.8" # For the base tile definitions
bevy_tileset = "0.8" # For general tileset usage (includes above)
✨ 使用
只需在配置文件中**定义您的瓦片和瓦片集
// assets/tiles/my_tile.ron
(
name: "My Tile",
tile: Standard("textures/my_tile.png")
)
// assets/my_tileset.ron
(
name: Some("My Awesome Tileset"),
id: 0,
tiles: {
0: "../tiles/my_tile.ron",
// ...
}
)
并通过系统**加载它
use bevy::prelude::*;
use bevy_tileset::prelude::*;
fn load_tiles(asset_server: Res<AssetServer>) {
let handle: Handle<Tileset> = asset_server.load("my_tileset.ron");
// Store handle...
}
然后从任何地方**访问生成的瓦片集
fn my_system(tilesets: Tilesets, /* other system params */) {
let tileset = tilesets.get_by_name("My Awesome Tileset").unwrap();
let tile_index = tileset.get_tile_index("My Tile").unwrap();
match tile_index {
TileIndex::Standard(texture_index) => { /* Do something */ }
TileIndex::Animated(start, end, speed) => { /* Do something */ }
}
}
瓦片类型
目前有四种主要瓦片类型
🖼 标准型
定义基本瓦片。
// assets/tiles/my-tile.ron
(
name: "My Tile",
tile: Standard("textures/my_tile.png")
)
🎞️ 动画型
定义动画瓦片,可以使用来自bevy_ecs_tilemap
的GPUAnimated
组件生成。
// assets/tiles/my-animated-tile.ron
(
name: "My Animated Tile",
tile: Animated((
speed: 2.25,
frames: [
"textures/animated-001.png",
"textures/animated-002.png",
"textures/animated-003.png",
]
))
)
🎲 变体型
启用
variants
功能后
定义具有一组可能变体的瓦片。放置时随机选择一个变体。这些变体可以是标准型或动画型。
// assets/tiles/my-variant-tile.ron
(
name: "My Crazy Random Tile",
tile: Variant([
(
weight: 1.0,
tile: Standard("textures/variant-standard-001.png")
),
(
// Default weight: 1.0
tile: Standard("textures/variant-standard-002.png")
),
(
weight: 0.0001, // Wow that's rare!
tile: Animated((
// Default speed: 1.0
frames: [
"textures/variant-animated-001.png",
"textures/variant-animated-002.png",
"textures/variant-animated-003.png",
]
))
)
])
)
🧠 自动型
启用
auto-tile
功能后
定义自动根据其邻居选择活动瓦片的瓦片。可以通过规则控制此行为。这些子瓦片本身是变体型瓦片。
// assets/tiles/my-auto-tile.ron
#![enable(implicit_some)]
(
name: "My Auto Tile",
tile: Auto([
(
rule: (
north: true,
east: false,
west: true,
),
variants: [
(
tile: Standard("textures/n_w-e-001.png")
),
(
weight: 2.0,
tile: Standard("textures/n_w-e-002.png")
)
]
),
(
rule: (
// Also supports short notation
n: false,
s: false,
// And ordinal directions
south_west: true,
nw: false
),
variants: [
(
tile: Standard("textures/sw-n_s_nw.png")
)
]
),
])
)
🎓 示例
另外,请务必查看assets文件夹以了解如何定义瓦片或瓦片集。
🌱 发展领域
这个crate在某些方面可以做得更好。以下是一些潜在的发展领域
- 瓦片集
- 配置文件 ★
- 改进自动瓦片
- 镜像/旋转(指定要镜像或旋转的规则)
- 加载
- 将配置加载为资产
以及一个整体上改进且更简洁的API。
🎵 重要提示
这些瓦片是通过考虑使用bevy_ecs_tilemap
软件包来定义的。因此,它旨在与基于索引的瓦片系统(其中瓦片的纹理被定义为纹理图集中的一个索引)一起使用。其他解决方案可能需要修改才能与此软件包一起使用。
🕊 Bevy 兼容性
bevy | bevy_tileset |
---|---|
0.11 | 0.8 |
0.10 | 0.7 |
0.9 | 0.6 |
0.8 | 0.5 |
0.7 | 0.4 |
0.6 | 0.3 |
0.5 | 0.2 |
依赖项
~42–77MB
~1M SLoC