7个版本
0.2.4 | 2024年8月2日 |
---|---|
0.2.3 | 2024年7月26日 |
0.1.1 | 2024年5月13日 |
0.1.0 | 2024年4月22日 |
#493 in 游戏开发
每月378次下载
1.5MB
697 代码行
Bevy Aseprite Ultra
这是最强大的 bevy aseprite 插件。此插件允许您将 aseprite 文件导入 bevy,具有100%不可中断的热重载。您还可以使用带有功能偏移量的切片从 aseprite 图集类型文件中导入静态精灵!
Bevy 版本 | 插件版本 |
---|---|
0.14 | 0.2.4 |
0.13 | 0.1.0 |
我在我的游戏中使用了它,请在我的 博客 上查看
支持的 aseprite 功能
- 动画
- 标签
- 帧持续时间、重复和动画方向
- 图层可见性
- 混合模式
- 静态切片和枢轴偏移量
bevy 中的功能
- 随时随地进行任何热重载!
- 使用组件完全控制动画。
- 一次性动画和完成时的事件。
- 带有切片的静态精灵。使用 aseprite 满足您的所有图标和 UI 需求!
(要使热重载正常工作,您必须安装 bevy 的 file_watcher
货物依赖项)
示例
cargo run --example slices
cargo run --example animations
角色动画由 Benjamin 提供
此插件添加了两个主要包,分别是 AsepriteAnimationBundle
和 AsepriteSliceBundle
。
use bevy::prelude::*;
use bevy_aseprite_ultra::prelude::*;
...
// Load the an animation from an aseprite file
fn spawn_demo_animation(mut cmd : Commands, server : Res<Assetserver>){
cmd.spawn(AsepriteAnimationBundle {
aseprite: server.load("player.aseprite"),
transform: Transform::from_translation(Vec3::new(15., -20., 0.)),
animation: Animation::default()
.with_tag("walk-right")
.with_speed(2.)
// Aseprite provides a repeat config per tag, which is beeing ignored on purpose.
.with_repeat(AnimationRepeat::Count(42))
// The direction is provided by the asperite config for the tag, but can be overwritten
// after the animation is loaded.
.with_direction(AnimationDirection::PingPong)
// you can also chain finite animations, loop animations with never finish
.with_then("walk-left", AnimationRepeat::Count(4))
.with_then("walk-up", AnimationRepeat::Loop)
// you can override the default sprite settings here
sprite: Sprite {
flip_x: true,
..default()
},
..default()
});
}
// Load a static slice from an aseprite file
fn spawn_demo_static_slice(mut cmd : Commands, server : Res<Assetserver>){
cmd.spawn(AsepriteSliceBundle {
slice: "ghost_blue".into(),
// you can override the default sprite settings here
// the `rect` will be overriden by the slice
// if there is a pivot provided in the aseprite slice, the `anchor` will be overwritten
// and changes the origin of rotation.
sprite: Sprite {
flip_x: true,
..default()
},
aseprite: server.load("ghost_slices.aseprite"),
transform: Transform::from_translation(Vec3::new(32., 0., 0.)),
..default()
});
}
// animation events - tell me when the animation is done
// this is useful for one shot animations like explosions
fn despawn_on_finish(mut events: EventReader<AnimationEvents>, mut cmd : Commands){
for event in events.read() {
match event {
AnimationEvents::Finished(entity) => cmd.entity(*entity).despawn_recursive(),
// you can also listen for loop cycle repeats
AnimationEvents::LoopCycleFinished(_entity) => (),
};
}
}
Bevy Ui
还有一个 Bevy Ui 节点的 Ui 包!
// animations in bevy ui
cmd.spawn((
ButtonBundle{
// node config
..default()
},
AsepriteAnimationUiBundle{
aseprite: server.load("yourfile.aseprite"),
animation: Animation{
tag : Some("idle".to_string()),
..default()
},
..default()
},
));
// slices in bevy ui
cmd.spawn((
ImageBundle{
// node config
..default()
},
AsepriteSliceUiBundle{
aseprite: server.load("yourfile.aseprite"),
slice: AsepriteSlice::from("your_slice"),
..default()
},
));
依赖项
~38–76MB
~1.5M SLoC