6个版本 (破坏性更改)
0.6.0 | 2024年7月8日 |
---|---|
0.5.0 | 2024年6月8日 |
0.4.0 | 2024年4月8日 |
0.3.1 | 2024年4月4日 |
0.1.3 |
|
#177 in 游戏开发
每月26次下载
220KB
2.5K SLoC
bevy_tween
Bevy过程式和关键帧动画库。
这是一个年轻的插件,API可能需要进一步完善。预期会有破坏性更改!
查看变更日志 这里。
功能
-
直观且用户友好的API:您可以手动启动动画师,但此crate提供了抽象大部分样板代码的API。可以使用功能组合器通过builder构建动画。
示例
let sprite_id = commands.spawn(SpriteBundle { ... }).id(); let sprite = sprite_id.into_target(); commands.animation() .insert(tween( Duration::from_secs(1), EaseFunction::Linear, sprite.with(translation(pos0, pos1)) ));
您也可以抽象动画!
fn my_animation( target: TargetComponent, duration: Duration ) -> impl FnOnce(&mut AnimationCommands, &mut Duration) { parallel(( tween(duration, EaseFunction::QuadraticOut, target.with(translation(...))), tween(duration, EaseFunction::QuadraticOut, target.with(rotation(...))), )) } let sprite_id = commands.spawn(Sprite { ... }).id(); let sprite = sprite_id.into_target(); commands.animation().insert(my_animation(sprite, Duration::from_secs(1)))
-
灵活且可扩展:此crate基于
bevy_time_runner
构建,这意味着我们可以通过添加任何组件和系统来扩展此crate。- 从任何地方对任何事物进行插值,内置或自定义系统。
- 使用任何曲线进行插值,内置或自定义系统。
- 其他任何事物。
-
并行性:插值是类型化的,可以通过它们的类型化系统进行查询,这增加了系统并行化的机会。
-
丰富的计时器控制:
- 循环
- 时间缩放
- 向前或向后跳过
- 跳到任何时间点
见 演示
目标
- 灵活 🎉
- 与其他crate(?)集成
-
bevy_animation
-
bevy_lookup_curve
-
- 编辑器。虽然此crate的原始目标是使用代码进行插值,但此crate绝对具有处理任何复杂动画的能力。编辑器将有助于此类任务。
- 在动画的任何时间点实时显示。
- 使用任意曲线从点A到点B编辑路径。
差异
此插值crate的主要动机是现有的插值crate不够灵活,因此主要目标是解决此问题。
与 bevy_tweening
或 bevy_easings
的差异
- 插值不与特定实体绑定。您可以在世界中的任何位置创建专门用于插值的实体。
- 使用子父级层次结构解决复杂的动画,例如顺序或并行插值。
- 解决了前一个版本中存在的在运行时修改动画的问题。
- 在ECS世界中,所有内容都存在且没有隐藏的结构,所有内容都可以自由访问。
- 创建了一个非常可扩展的系统,多亏了Bevy的ECS!
- 由于这个crate的设计,可以存在多个
Interpolator
(如果你来自bevy_tweening
,则为Lens
)来插值相同的组件/资产/资源,因此它不受“每个实体一个组件类型”的限制。
- 高级计时器。这个crate有自定义计时器实现。
- 依赖注入。系统通过各种特定组件进行通信,通过提供这些组件来扩展行为以满足您的需求,并减少重复。
- 这个crate的用户可以自由决定是否只想使用泛型、只想使用特质对象,或者两者都用于插值,甚至完全使用其他内容。
功能门控
- 默认值
bevy_asset
为资产添加插值系统。bevy_render
目前除了需要bevy_sprite功能外,没有添加任何内容。bevy_sprite
添加一些与精灵相关的内置插值器。bevy_ui
添加一些与UI相关的内置插值器。bevy_eventlistener
使用bevy_eventlistener添加实体目标事件。
- 可选
bevy_lookup_curve
.
使用bevy_lookup_curve
添加插值实现。
Bevy版本支持
bevy |
bevy_tween |
---|---|
0.14 | 0.6 |
0.13 | 0.2–0.5 |
致谢
-
我是第一个发现并尝试在Bevy中进行插值操作的crate。他们的
Lens
方法很棒,因此它也出现在这个crate中。现在称为Interpolator
。用法可能相似,但实现方式不同。 -
Godot的插值使动画变得简单,这是这个crate的灵感来源。多实体架构主要受Godot节点子父级层次结构系统以及大多数引擎API使用该系统来定义行为的影响。
贡献
欢迎贡献!
许可证
许可协议为以下之一
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
您的贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您提交给工作内容的任何有意贡献,都应按上述方式双许可,不附加任何额外条款或条件。
演示
cargo运行 --example跟随 -Fbevy/bevy_winit
一个方块将跟随您的圆形,具有可配置的动画。
https://github.com/Multirious/bevy_tween/assets/77918086/d582c2de-0f54-4b22-be03-e3bff3348deb
cargo运行 --example点击 -Fbevy/bevy_winit
点击左键以生成圆形。按住右键以每帧重复生成圆形。
https://github.com/Multirious/bevy_tween/assets/77918086/fd0fe9d3-13a2-4261-880c-cc2609b875ba
cargo运行 --example保持 -Fbevy/bevy_winit
按住左键以增加效果强度。
https://github.com/Multirious/bevy_tween/assets/77918086/33a297a6-19f2-4146-a906-1a88ff037ab3
cargo运行 --example事件 -Fbevy/bevy_winit
展示插值事件功能。
https://github.com/Multirious/bevy_tween/assets/77918086/9507c467-6428-4aed-bd00-511f05e6e951
cargo运行 --example精灵图集 -Fbevy/bevy_winit
精灵图集动画。
https://github.com/Multirious/bevy_tween/assets/77918086/e3997b06-38e6-4add-85f5-a885b69c6687
依赖项
~20–58MB
~1M SLoC