- 单个动画
// 缓动移动
transform.DOMove(new Vector3(x, y, 0), 0.5F).SetEase(Ease.InOutSine);
transform.DOLocalMove(new Vector3(x, y, 0), 0.5F).SetEase(Ease.InOutSine);
// 相对于原本位置的位移(offset)
transform.DOBlendableLocalMoveBy(Vector3.one, 2);
// 旋转
transform.DORotate(new Vector3(0, 0, -0), 0.5F).SetEase(Ease.InOutSine);
// 变为红色
gameObject.GetComponent<Image>().DOColor(Color.red, 2);
// 变为透明
gameObject.GetComponent<Image>().DOFade(0, 2)
// 多颜色渐变动画
// 第二个参数:Shader的颜色名称,可以在shader中Edit Shader查看名字
// 在DOColor和DOFade中同样适用
GetComponent<MeshRenderer>().material.DOGradientColor(Gradient, "_Color", 2);
// 四元向量(如颜色)修改动画
GetComponent<MeshRenderer>().material.DOVector(Color.blue, "_Color", 2);
- 连续动画
// 新建动画集
Sequence se = DOTween.Sequence();
// 添加动画
se.Append(Tween);
// 添加动画,该动画会与该行之上的Append一起执行
se.Join(Tween);
// 插入动画(秒)
se.Insert(0, Tween);
// 等待
se.AppendInterval(2)
// 调用函数
se.AppendCallback(oneCallBack)
// 某个时间点调用函数
se.InsertCallback(2, oneCallBack)
// 开始
se.Play();
// 暂停
se.Pause();
// 在开始动画前预运行
se.PrependInterval();
se.PrependCallback();
se.Prepend();
-
SetXXX()
设置参数- SetEase 设置运动曲线
可用入参 描述 Ease Ease函数 AnimationCurve 定制曲线 - SetLoops 设置动画循环次数,-1为无限循环。可加入入参 LoopType 设定循环方式
LoopType类型 描述 Yoyo 正播之后倒播 Incremental 重播时不重置位置 Restart 重播时重置位置 - SetDelay 设置等待时间
- SetAutoKill 是否自动回收
- SetId 设置ID
DOTween.Pause(ID);// 暂停指定ID
- SetRelative 设置向量不是目标位置。而是偏移的大小
- SetUpdate 设置更新类型,是否不受
Time.timeScale
影响
SetUpdate(UpdateType.Normal, true);
- SetLink将tween与对象关联,一但对象被清除,dotween将停止(或给到枚举的一种)。
-
DOTween.To
万能动画
Vector3 v3;
DOTween.To(() => v3, x => v3 = x, new Vector3(10, 10, 10), 10F);
- 动画的倒播
想要倒播动画,需要设置动画对象的SetAutoKill(false)
,然后运行DOPlayBackwards()
。
示例:
public Transform obj;
public bool flag;
private void Start()
{
// 新建动画
Tweener tweener = obj.DOMove(new Vector3(1, 1, 1), 1).SetEase(Ease.InBack);
// 不会自动销毁
tweener.SetAutoKill(false);
// 先不播放这个动画
tweener.Pause();
// 播放一次
// obj.DOPlayForward();
}
public void Click()
{
if (flag)
{
// 正播
obj.DOPlayForward();
}
else
{
// 反播
obj.DOPlayBackwards();
}
flag = !flag;
}
- From动画
为DoTween动画后追加一个From()
,来让动画变成从目标坐标移动到当前坐标
From()
存在入参,如果传入true,那么动画的坐标从世界坐标改为相对坐标
例:
obj.DOMove(new Vector3(1, 1, 1), 1).From();
- OnComplete、OnStart回调
OnComplete()
可以让动画在播放结束时,添加一个额外的回调函数
OnStart()
可以让动画在播放开始时,添加一个额外的回调函数
例:
int value = 2;
obj.DOLocalMove(new Vector3(1, 1, 1), 1).OnComplete(() =>
{
Debug.Log(value);
});
其他的还有onKill
、OnStart
(第一次)、onPlay
(第一次和暂停结束后)、onPause
、onRewind
(重新播放)
DOText()
文字动画
为文字添加逐一显示的动画
例:
txt.DOText("大家好我爱你们!", 1, false, ScrambleMode.All);
DOText()
文字动画
为文字添加逐一显示的动画
例:
txt.DOText("大家好我爱你们!", 1, false, ScrambleMode.All);
// 时间,振幅,频率,振动转向范围, 位移为整数, 是否采用缓动动画
obj.DOShakePosition(2, new Vector3(1, 1, 0), 10, 90, false, true);
DOPunchPosition()
冲击动画
让物体向一个方向冲击出去然后反弹回来。
// 冲击 -> 方向、持续时间、次数(频率)、反弹超出距离
obj.DOPunchPosition(new Vector3(0, 1, 0), 2, 2, 0.15f);
- 摄像机动画
Camera camera = Camera.main;
// 修改宽高比(改宽度)
camera.DOAspect(0.5f, 2);
// 修改背景颜色
camera.DOColor(Color.green, 2);
// 修改摄像机近切面和远切面的值
camera.DONearClipPlane(0.5f, 2);
camera.DOFarClipPlane(0.5f, 2);
// 透视模式 摄像机视野
camera.DOFieldOfView(0.5f, 2);
// 正交模式 摄像机大小
camera.DOOrthoSize(0.5f, 2);
// 摄像机镜头在界面中显示的位置与大小
camera.DORect(new Rect(.1f, .2f, .3f, .4f), 2);
// 时间,振幅,频率,振动转向范围, 是否采用缓动动画
camera.DOShakePosition(2, new Vector3(1, 1, 0), 10, 90, false);
- 控制函数
// 逆播回到原位置
transform.DOSmoothRewind();
// 维持当前速度回到原位置
transform.DORewind();
// 播放
transform.DOPlay();
// 暂停
transform.DOPause();
// 切换暂停和播放的状态
transform.DOTogglePause();
// 跳转时间点、跳转后是否继续播放
transform.DOGoto(0.2f, true);
// 倒播
transform.DOPlayBackwards();
- 获取动画
// 获取所有播放的动画
var list = DOTween.PlayingTweens();
// 获取所有暂停的动画
list = DOTween.PausedTweens();
// 根据ID获取动画
list = DOTween.TweensById("tMove");
// 根据对象获取动画,是否仅在其播放时候获取到
list = DOTween.TweensByTarget(transform, true);
- 获取数据
var tweener = transform.DOMove(Vector3.zero, 2).SetLoops(3);
// 设置动画播放的时间点
tweener.fullPosition = 0;
// 动画循环的次数
Debug.Log( tweener.CompletedLoops() );
// 动画播放时间,如果循环是否累计播放时间
Debug.Log( tweener.Elapsed(true) );
// 动画播放的百分比
Debug.Log( tweener.ElapsedDirectionalPercentage() );
// 包括循环、动画播放的百分比
Debug.Log( tweener.ElapsedPercentage() );
// 判断动画是否反向
Debug.Log( tweener.IsBackwards() );
// 判断动画是否活动
Debug.Log( tweener.IsActive() );
// 判断动画是否完成
Debug.Log( tweener.IsComplete() );
// 判断动画是否初始化
Debug.Log( tweener.IsComplete() );
// 判断动画是否正在播放
Debug.Log( tweener.IsPlaying() );
// 判断动画循环次数
Debug.Log( tweener.Loops() );
- 携程
Tweener tweener;
void Start()
{
tweener = transform.DOMove(Vector3.zero, 2).SetLoops(3);
StartCoroutine(Wait());
}
IEnumerator Wait()
{
yield return tweener.WaitForElapsedLoops(2);
Debug.Log("循环了两次");
}
IEnumerator Wait()
{
yield return tweener.WaitForPosition(3);
Debug.Log("过了3秒");
}
- 路径
public Transform[] pointList;
void Start()
{
Vector3[] positionList = new Vector3[pointList.Length];
for (int i = 0; i < pointList.Length; i++)
positionList[i] = pointList[i].position;
// v3集合、动画时间、路径是圆滑还是线性、朝向、点数量(对于圆滑)
transform.DOPath(positionList, 8, PathType.CatmullRom, PathMode.Full3D, 50)
// 是否回路、路径在哪个轴
.SetOptions(true, AxisConstraint.None)
// 设定朝向: 点
// .SetLookAt(new Vector3(0, 0, 0));
// 设定朝向: 路径前方(0)->路径后方(1f)
.SetLookAt(0);
}