BetterAnimation 是一个用于将 Unity 的 AnimationClip 转换为 DOTween 代码的插件,解决了 Animation 和 Animator 的许多缺点。它可以帮助开发者在 Unity 中更轻松地创建和管理UI动画。
相较于传统的 Unity Animation 和 Animator,BetterAnimation 提供了以下优势:
- 避免在高刷屏下因帧率波动导致丢帧的问题。
- 提供对缓动函数变量的高自由度控制。
- 允许在运行时修改 Keyframe,实现更高自由度的动画效果。
- 更高效,避免了在许多 2D 项目中不必要的计算开销。
- 支持在单个动画中插入事件,避免通用动画带来的问题。
- 可以在动画中插入部分代码,如暂停动画并等待用户输入。
- 支持反转动画播放,同时避免错误的事件回调。
- 支持链式编程。
- 快速切换状态并保留 GameObject 当前位置,提供更高的自由度。
- 支持多个动画同时播放。
- 提供更强大的事件触发机制,支持获取上下文数据。
- 支持协程、async 和 await,更友好地支持异步编程。
- 对代码调试更友好,便于查看相关数据。
- 可控的生命周期以及执行周期
- 支持 DOTS 代码,适用于高性能、高优化的环境。
- 支持 Generic 动画
- 支持Transition
- 将Tween功能抽象出来.
- 重构和整理代码
- 提供更多可用的低级API
- 补充更多复杂的单元测试用例
- 补充Benchmark测试
- 增加对Object序列帧的支持
- 将
BetterAnimation
脚本添加到您希望使用的游戏对象上。 - 打开
ProjectStteing
找到Better Animation Config
修改 AOT代码路径和动画序列化文件路径 - 在 Unity 编辑器中,将所需的 AnimationClip 添加到
BetterAnimation
组件中的 AnimationClip 列表中。 - 在脚本中调用
DoJob(animationName)
方法,该方法将返回一个AnimationBuilder
对象,用于配置和播放动画。
以下是 BetterAnimation 的一个基本示例:
public class BetterAnimationExample : MonoBehaviour
{
public BetterAnimation betterAnimation;
private void Start()
{
var animationBuilder = betterAnimation.DoJob("ExampleAnimation");
animationBuilder.OnComplete(() => Debug.Log("Animation completed"))
.SetLoops(2)
.Play();
}
}
该插件对 Unity 的 Animation Window 进行了钩子操作。您也可以选择不使用钩子,但这可能会导致您失去以下特性:
- 无法直接编辑帧事件:使用钩子功能允许您直接编辑帧事件,否则这将无法实现。
- 组件兼容性:在使用 BetterAnimation 的组件时,仍然需要挂载 Animation/Animator 组件,否则 Animation Window 无法检测到 Animation Clip。
- 手动操作 Animation Clip:在创建 Animation Clip 后,您需要手动将其拖动到 BetterAnimation 组件中。
Animator 会在每一帧都修改它们的元素,即使动画中的值并没有改变。Animator 没有无操作的检查。具体可以参考官方回答。