DOTween的简单了解

1,480 阅读4分钟

本文仅用于记录和分享学习过程,如有错误望各位指正

前言

本文主要参考自DOTween官方文档 dotween.demigiant.com/documentati…

简介

DOTween是一个快速、高效、完全类型安全的面向对象的Unity补间动画插件,用于快速实现程序动画,与其他补间引擎相比速度更快、效率更高、类型更安全,避免了无用的GC分配,并提供了新的快捷方式和功能

补间动画:只需给出起始值和结束值,过渡动画会由软件自动生成,在Flash等软件中大量使用

前缀

了解前缀有助于使用编辑器的智能联想

  • DO: 所有Tween快捷方式的前缀(可以直接从已知对象开始的操作,例如Transform或Material)。也是主DOTween类的前缀
  • Set:对tween进行设置的前缀
  • On:设置tween回调的前缀

DOTween的初始化

使用

static DOTween.Init()

static DOTween.Init(bool recycleAllByDefault = false, bool useSafeMode = true, LogBehaviourlogBehaviour = LogBehaviour.ErrorsOnly)

对DOTween进行初始化和设置参数

在第一次使用补间时DOTween将自动根据默认值进行初始化,若需要使用非默认值需要在使用补间前进行初始化,但任然可以在那之后通过DOTween的全局设置更改初始化设置

参数:
  • recycleAllByDefault:所有的Tween执行结束后会默认销毁,当值为true时Tween在Kill时不会被销毁而是放入池中等待重分配,可以通过重分配Tween对象避免GC分配 也可通过静态属性static DOTween.defaultRecyclable全局修改,或是通过SetRecyclable()设置每个Tween的回收行为
  • useSafeMode:当设置为true时Tween的执行会稍慢但更加安全,DOTween将能够自动处理在Tween运行时被destroy的目标
  • logBehaviour:根据选择的模式,DOTween将仅记录 错误/错误和警告/所有内容以及其他信息

创建Tween的三种方法

通用方法:

最灵活的补间方式,允许补间几乎所有值,使用委托作为参数,格式如下

static DOTween.To(getter, setter, to, float duration)

将给定属性从当前值转变为给定值 getter: 将属性的值返回给Tween的委托 ( )=>myValue,myValue是返回给Tween的属性名 setter:  将返回给属性的值设置为补间的委托 x => myValue = x to:  需要达到的给定值 duration:  补间的持续时间

快捷方法:

 DOTween包含一些已知Unity对象的快捷方法,例如Transform,Rigidbody和Material。可以直接从对这些对象的引用开始补间(并自动将对象本身设置为补间目标,此时对象的当前值即为getter值)

每个快捷方法都有一个From替代方法,在方法后使用.From(),将当前值设置为目标值,给定值设置为当前值

示例如下

transform.DOMove(new Vector3(2,3,4), 1);
rigidbody.DOMove(new Vector3(2,3,4), 1);
material.DOColor(Color.blue, 1);
其他通用方法:

以特定方式补间的其他方法,一般都存在From替代版本,示例如下

//向指定方向弹性冲击
DOTween.Punch(( )=> myVector, x=> myVector = x, Vector3.up, 1);

Sequence序列

Sequence可将其他补间动画或Sequence设为一组集中处理,常用于建立较为复杂的动画组

一个序列或补间只能嵌套在唯一的另一个序列中,一个序列也无法单独控制嵌套在其中的补间

Sequence在执行时会取决于Tweens插入位置随着时间顺序执行,也能通过Insert函数让动画并列执行

使用步骤:
  1. 抓取新序列并存储,如下
static DOTween.Sequence()
Sequence  mySequence = DOTween.Sequence();
  1. 向序列中添加补间,回调或序列,如下
mySequence.Append(transform.DOMove(new Vector3(2, 3, 4), 1));
mySequence.PrependInterval(2f);
mySequence.InsertCallback(1.5f, ( ) => { <doSth...> } );

简化形式:

mySequence.Append(transform.DOMove(new Vector3(2, 3, 4), 1))
.PrependInterval(2f)
.InsertCallback(1.5f, ( ) => { <doSth...> } );
添加方法:

分为Append、Insert、Prepend三种类型方法,每种类型都存在添加 动画、回调、时间间隔 的不同方法

Sequence将顺序执行加入的动画、回调函数或等待给定时间(s)

  • Append:在序列尾部插入项
  • Prepend:在序列开头插入项
  • Insert:在指定的时间位置上加入项,这会使某些项并列执行,而不是单线执行
  • Join:在最后加入的项的序列位置处加入项

控制Tween

可通过三种方法控制动画

全局控制:

可通过使用静态方法全局控制动画或是通过ID和目标控制部分动画,如下:

DOTween.PauseAll(); 
DOTween.Pause("badoom");
DOTween.Pause(someTransform);
直接从动画控制:

从Tweener中调用相应的函数,如下:

myTween.Pause();
快捷方式控制:

可通过支持快捷方法创建Tween的Unity对象使用相应的函数,在这时函数前应加DO前缀,如下:

transform.DOPause();

生命周期

创建Tween时补间动画将自动播放(除非更改全局的默认自动播放设置)

Tween完成后将被自动Kill并销毁,无法继续使用,若要重复使用Tween则需更改全局的默认Kill设置(recycleAllByDefault)为false或通过SetAutoKill(false)设置单个动画行为

若Tween的目标变成了null,正在播放的补间动画会产生错误,需要随时注意目标或激活安全模式(useSafeMode

使用DOTween.Clear() 以重置DOTween,这将销毁所有Tween并清除所有缓存