9个版本 (4个破坏性)
0.6.0 | 2024年2月23日 |
---|---|
0.5.2 | 2023年12月13日 |
0.4.2 | 2023年12月11日 |
0.3.0 | 2023年11月7日 |
0.2.0 | 2023年10月26日 |
#380 in 游戏开发
1MB
875 行
Bevy Asepritesheet
Bevy Asepritesheet是Bevy游戏引擎的资产加载器和解析器。Bevy Asepritesheet处理由Bevy游戏引擎导出的json精灵图集文件。它还包括构建和管理游戏中的动画精灵实体的组件和系统。
Bevy Asepritesheet能够解析类似于这样的精灵图集,将其转换为基于aseprite json数据的独立动画。
重要!- Json数据导出自Aseprite时,必须设置为"Array"。
如果设置为"Hash",则不会工作!
功能
- 资产加载器 - 资产加载器可以指定所需的任何文件扩展名
- 精灵动画器 - 库中包含精灵动画器组件,用于在游戏世界中生成具有动画的实体
- 插件 - 库包含一个Bevy插件,可以将资产加载器添加到Bevy应用程序中,并自动注册动画事件系统,以及设置自动动画精灵组件
- 动画事件 - 动画发送动画事件,每当动画结束时,都会发送事件,包含实体和动画的信息,因此您可以根据需要对其进行监听和处理
- 动画结束动作 - 动画可以循环、暂停、停止或过渡到另一个动画,所有这些都可以通过库配置
Aseprite功能支持
Bevy Ase spritesheet支持Aseprite导出的几乎所有功能,以下是已导出并是否在Bevy Ase spritesheet中支持的功能列表
键
✅ - 完全支持并实现
❌ - 不支持
Aseprite功能
- 帧 ✅ - 每个精灵图集中的帧作为矩形解析,并由库处理
- 帧裁剪 ✅ - Aseprite可以裁剪帧矩形,以避免在帧之间出现不必要的间隔,库会处理每个帧的裁剪并相应地调整锚点,以避免动画抖动
- 帧持续时间 ✅ - Aseprite中的每个帧都有特定的显示时间,库会包含这些数据,并在游戏运行时反映出来
- 帧标签 ✅ - 帧标签是精灵中帧的组合,可以拥有一个“标签”,这个库将标签解释为动画,因此如果您有一个名为“running”的包含10个帧的FrameTag,这个库将从这个标签生成一个“running”动画
- 帧标签范围 ✅ - 在游戏中,指定为帧标签的帧将包含在动画中
- 帧标签方向 ❌ - 在Aseprite中,您可以指定帧标签是正向播放还是反向播放,我觉得这没有太大意义,所以不会实现这个功能,如果您需要反转动画,您可以始终反转帧
兼容性
bevy_asepritesheet | bevy | aseprite |
---|---|---|
0.6.x | 0.13 | 1.3.4 |
0.5.x | 0.12 | 1.3.2 |
0.4.x | 0.12 | 1.3.2 |
0.3.x | 0.12 | 1.2.40 |
0.2.x | 0.11 | 1.2.40 |
使用示例
首先,您需要在Cargo.toml
中添加依赖项
[dependencies]
bevy_aseprite = "0.5"
然后,您需要将插件添加到您的bevy应用程序中
use bevy::prelude::*;
use bevy_asepritesheet::prelude::*;
fn main() {
App::new()
.add_plugins(( DefaultPlugins.set(ImagePlugin::default_nearest()),
AsepritesheetPlugin::new(&["sprite.json"]),
))
.add_systems(Startup, setup)
.run();
}
然后,您只需加载精灵表,并使用句柄创建一个AnimatedSpriteBundle
来开始动画精灵,就是这样!
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
// spawn the camera so we can see the sprite
commands.spawn(Camera2dBundle::default());
// load the spritesheet and get it's handle
let sheet_handle = load_spritesheet(
&mut commands,
&asset_server,
"witch.sprite.json",
bevy::sprite::Anchor::Center,
);
// spawn the animated sprite
commands.spawn(AnimatedSpriteBundle {
animator: SpriteAnimator::from_anim(AnimHandle::from_index(1)),
spritesheet: sheet_handle,
..Default::default()
});
}
AnimatedSpriteBundle
实体将在资产加载完成之前保持不可见
运行示例
要运行示例
cargo run --example character
要查看完整的示例,请参阅examples/character.rs。
资产信用
我使用的资产是Legnops制作的免费资产的修改版本
https://legnops.itch.io/red-hood-character
更新日志
0.6.0
- ✅ 支持 Bevy 0.13
- ✅ 添加了 Spritesheet 监听器以添加相关句柄
- ✅ 可指定动画调度程序,或指定无动画
- ✅ 更新示例
0.5.1
- ✅ 更新示例
- ✅ 设置无效动画现在会生成警告并将cur_anim重置为None
- ✅ 添加当 Spritesheet 加载完成时的事件
0.5.0
- ✅ 更新示例
- ✅ 通用重构
- ✅ 资源以处理动画逻辑
- ✅ utility 函数 load_spritesheet 以自动加载相关资产
- ✅ 重构从动画器引用精灵表的方式,现在使用句柄
- ✅ get_anim_handle 现在不那么严格(但返回的句柄可能无效)
- ✅ set_anim 现在不那么严格
0.4.2
- ✅ 小型错误修复
0.4.1
- ✅ 修复导致翻转精灵锚点错位的错误
- ✅ 实现AnimHandle的默认值
- ✅ 添加is_cur_anim()到SpriteAnimator,以便轻松比较当前动画
- ✅ 添加restart_anim()来重新开始精灵动画器的当前动画
0.4.0
- ✅ 更新示例
- ✅ 修复导致难以使用
Spritesheet::from_data()
的错误 - ✅ 为
AnimatedSpriteBundle
实现默认值 - ✅ 为
SpriteAnimator
实现默认值 - ✅ 使
SpriteAnimator
在初始化时不需要加载表 - ✅ 将
Sheet
类型重命名为Spritesheet
- ✅ 通用代码重构,以更好地符合 Rust 的惯用模式
0.3.0
- ✅ 适配资产管理模块以与 bevy 0.12 一起使用
依赖项
~18–46MB
~729K SLoC