零、简介
DOTween是脚本化动画API插件。可以实现各种想要的缓动/动画效果。
一、DOTween类关系
ABSSequentiable
↓
Tween
↓
Tweener
↓
TweenerCore
二、DOTween简单使用
示例:
Tween tween = t.DOMove(t.position + new Vector3(0, 0, 1f), 0.5f);
函数列表:
//十秒内X,Y,Z 局部坐标(localPosition)移动到 10,10,10 位置
//transform.DOBlendableLocalMoveBy(new Vector3(10, 10, 10), 10);
//十秒内 X,Y,Z 方向的局部旋转(localPosition),转动到 30,30,30
//transform.DOBlendableLocalRotateBy(new Vector3(30, 30, 30), 10);
//十秒内X,Y,Z坐标移动到 自身坐标 加 new Vector3( 10,10,10) 位置 原始 坐标 3,3,3,移动后 13,13,13
//transform.DOBlendableMoveBy(new Vector3(10, 10, 10), 10);
//十秒内X,Y,Z自身旋转到 30,30,30(有父物体的相对于父物体)
//transform.DOBlendableRotateBy(new Vector3(30, 30, 30), 10);
//十秒内 自身X,Y,Z方向的比例 加 3,3,3如原始比例 2,1,1 变化后5,4,4
//transform.DOBlendableScaleBy(new Vector3(10, 10, 10), 10);
//执行该方法,变化立即结束,且完成移动
//transform.DOComplete();
//在变化过程中执行该方法,则物体慢慢的变回原样,如果变化已经完成,该方法无效
//transform.DOFlip();
// 变化过程中执行该方法,则物体变化到 第二秒 时该物体的位置、比例等
//transform.DOGoto(2);
//十秒内 弹跳 3次
//transform.DOJump(new Vector3(10, 10, 10), 3, 10);
//停止掉当前的变化
//transform.DOKill();
// 十秒内 弹跳 3次, 局部坐标最终变化为 10, 0, 10
//transform.DOLocalJump(new Vector3(10, 10, 10), 3, 10);
// 5 秒内, 局部坐标变化到 10,10,10
//transform.DOLocalMove(new Vector3(10, 10, 10), 5);
// 10 秒内 X 局部坐标变换到 5
//transform.DOLocalMoveX(5, 10);
// 10 秒内 Y 局部坐标变化到 5
//transform.DOLocalMoveY(5, 10);
//10 秒内 Z 局部坐标变化到 5
//transform.DOLocalMoveZ(5, 10);
//transform.DOLocalPath();
//5 秒内 局部旋转变化到 10,10, 10
//transform.DOLocalRotate(new Vector3(10, 10, 10), 5);
// 自身朝向 坐标(10,10,10)
//transform.DOLookAt(new Vector3(10, 10, 10), 5);
// 5 秒内 移动到 坐标 (10,10,10)
//transform.DOMove(new Vector3(10, 10, 10), 5);
//10 秒内 X 局部坐标变化到 5
//transform.DOMoveX(5, 10);
//10 秒内 Y 局部坐标变化到 5
//transform.DOMoveY(5, 10);
//10 秒内 Z 局部坐标变化到 5
//transform.DOMoveZ(5, 10);
//
//transform.DOPath();
//执行该方法停止 变化
//transform.DOPause();
//transform.DOPlay();
//变化结束前调用该方法,物体回到原始位置
//transform.DOPlayBackwards();
//执行 transform.DOPlayBackwards(); 物体回到原始位置
//执行 下面方法则再次变化
//transform.DOPlayForward();
//冲压机,在 5 秒内在原始坐标和下面坐标之间,来回冲压
//transform.DOPunchPosition(new Vector3(10, 10, 10), 5);
//冲压机,在 5 秒内在原始旋转和下面角度之间,来回冲压变化
//transform.DOPunchRotation(new Vector3(50, 50, 50), 5);
//冲压机,在 5 秒内在原始比例和下面比例之间,来回冲压变化
//transform.DOPunchScale(new Vector3(5, 5, 5), 5);
//在变化结束之前,执行该方法,则重新开始变化
//transform.DORestart();
//变化过程中执行该方法,回到原始
//transform.DORewind();
// 10 秒内 旋转角度 到 (50,50,50)
//transform.DORotate(new Vector3(50, 50, 50), 5);
// 10 秒内 比例变化到 (5,5,5)
//transform.DOScale(new Vector3(5, 5, 5), 5);
// 10 秒内 X 比例变化到 5
//transform.DOScaleX(5, 10);
// 10 秒内 Y 比例变化到 5
//transform.DOScaleY(5, 10);
// 10 秒内 Z 比例变化到 5
//transform.DOScaleZ(5, 10);
// 10 秒内 物体 X,Y,Z 坐标在 自身-5 到 自身加 5 之间震动
//transform.DOShakePosition(10, new Vector3(10, 10, 10));
// 10 秒内, 物体 X,Y,Z 旋转角度在 自身-5 到 自身加 5 之间震动
//transform.DOShakeRotation(10, new Vector3(10, 10, 10));
// 10 秒内, 物体 X,Y,Z 比例在 自身-5 到 自身加 5 之间震动
//transform.DOShakeScale(10, new Vector3(10, 10, 10));
//在变化过程中执行该方法,停止、开始、停止、开始
//transform.DOTogglePause();
// 执行该方法,坐标立即变化为 0,5,0, 从 0,5,0 两秒移动到初始位置
//transform.DOMove(new Vector3(0, 5, 0), 2).From();
// 执行该方法,移动到相对于原始位置 6,0,2 的位置
// 如原始位置 3,2,1。 移动后位置为 3 6,2 0,2 2 即 9,2,4
//transform.DOMove(new Vector3(6, 0, 2), 2).SetRelative();
三、Tween的链式调用
Tween链式调用示例:
Tween tween1 = DOTween.To
(
() => t.position,
(x) => t.position = x,
t.position + new Vector3(-2f, 0f, 0f),
0.25f
).OnComplete(
() => t.transform.DOMoveX(this.transform.position.x + 2f, 0.25f)
).SetEase(Ease.OutSine);
//getter 用来获取当前需要设置的值,setter用来设置当前数值,参数x是有DoTween计算过后的数值。endValue就是最终的数值,duration是使用的时间。和标准的Tween动画是一样的。
On开头的回调方法:
Tween tween = DOTween.To(() => {}});
tween.OnStart()
.OnKill()
.OnPause()
.OnPlay()
.OnRewind();
tween.OnStepComplete().
OnUpdate().
OnComplete();
Set开头的设置方法:
// SetAs(tween) 复制一个Tween对象的设置
// SetAutoKill 设置自动销毁
// SetDelay 设置延迟
// SetEase 设置缓冲类型
// SetId 设置ID 可以只用 int、string、object等类型的值
// SetLoops 设置循环类型
// SetRecyclable 设置为可回收,可循环使用的
// SetRelative 设置相对变化
// SetSpeedBased
// SetTarget
// 设置 Update 的值 告诉 Tween对象 是否忽视 Unity的 的 timeScale ,即是否受Unity 时间的影响
// SetUpdate(UpdateType.Normal, true) 设置为 true 为忽视 Unity的时间影响
// 设置为 false 为不忽视Unity的时间影响
四、Sequence动画队列
Sequence结构:
Sequence
Tween
→
Tween
→
Tween
→
Tween
→
Tween
...
动画队列使用示例:
DOTween.Sequence().Append(
t.DOMoveY(t.position.y - 1f, 2f)
)
.AppendInterval(
0.1f
)
.Append(
tween1
)
.AppendCallback(
() => { }
);
注意事项
Dotween.To()和Sequence都不能通过Dokill来终止,必须通过Kill方法终止。
Reference
https://gameinstitute.qq.com/community/detail/116463