本文仅用于记录和分享学习过程,如有错误望各位指正
前言
本文主要参考自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
函数让动画并列执行
使用步骤:
- 抓取新序列并存储,如下
static DOTween.Sequence()
Sequence mySequence = DOTween.Sequence();
- 向序列中添加补间,回调或序列,如下
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并清除所有缓存