在Asset Store 中 搜索DoTween并下载
代码调用前先引入命名空间:
using DG.Tweening;
通用方法:
DOTween.PlayAll();
让所有暂停的DoTween动画播放
DOTween.RestartAll();
让所有DoTween动画重置
.SetAutoKill(false)
加在DoTween方法后面,让这个动画在播放完成后不删除自身
.SetRelative()
加在DoTween方法后面,让动画变为从基础上增加
.OnStepComplete(()=> { Debug.Log("完成目标"); })
加在DoTween方法后面,渐变完成时执行一个逻辑,可以传入方法
.SetEase(Ease.Linear)
加在DoTween方法后面,让渐变方式变为匀速,参数可以传其他枚举,其他枚举作用暂不明
.SetLoops(-1, LoopType)
加在DoTween方法后面,让渐变循环执行,参数一用处暂不明,参数二为枚举:
LoopType.Restart
渐变达到最后之后,立刻重新开始
LoopType.Yoyo
渐变达到最后之后,在由最后渐变回最开始
LoopType.Incremental
根据每帧渐变变化的速率,没有终点的不断继续渐变
单次移动位置:
transform.DOMove(new Vector3(0,4,0), 2);
用一个物体的transform属性调用DOMove方法进行逐渐移动到一个位置,其中第一个参数是移动到的位置,第二个参数是移动到这个位置所需要的时间,时间越长移动越慢。
transform.DOMove(new Vector3(0,4,0), 2).From();
这个方法对比上一个最后多传入了一个.From(),物体会以0,4,0坐标作为起点,移动回自己现在所在的位置。
transform.DOMove(new Vector3(4,4,0), 2).SetRelative();
多了.SetRelative(),移动到的位置由参数变成了(参数+自身坐标)。
持续移动位置:
Tweener tween;
声明变量,这个变量能够储存一个transfrom调用Domove返回的结果
tween = transform.DOMove(target.position, 3).SetAutoKill(false);
方法是3秒移动到target的位置,.SetAutoKill(false)如果不加的话后面调用赋予新位置会报错
tween.ChangeEndValue(target.position, true).Restart();
给保存的变量设定终点,重点为target.position,第二个参数如果是true就是从当前位置前往新位置,false就是声明变量是的位置前往目标位置,加入.Restart()是立刻开始移动。
旋转:
gameobject.DORotate(new Vector3(45, 45, 45), 2);
物体在2秒内角度逐渐变换到参数一
材质相关:
gameObject.GetComponent<Renderer>().material.DOColor(Color.red, 2);
方法作用是将一个材质由自己的颜色逐渐变成第一个参数的颜色,第二个参数为时间,时间越长变化速度越慢
gameObject.GetComponent<Renderer>().material.DOColor(Color.red, 2).SetLoops(-1, LoopType.Yoyo);
对比上面方法加入了一个SetLoops(),效果是让材质颜色循环变换,第一个参数固定为负数,是颜色变回来的时间
第二个参数为枚举:
LoopType.Restart:颜色由颜色一缓慢变为颜色二后,瞬间变回颜色一,然后再缓慢变回颜色二。
LoopType.Yoyo:颜色由颜色一缓慢变为颜色二后,再缓慢由颜色二变回颜色一,再缓慢由颜色一变回颜色二。
LoopType.Incremental:在原基础上增加,不断循环让红色变得更红。
Tween colorTween, emissionTween, offsetTween;
声明变量,这个变量可以用来保存DoTween执行的方法,并为其添加新要素
colorTween = mat.DOColor(toColor, 1).SetLoops(-1, LoopType.Yoyo).Pause();
后面加上.Pause()可以让循环开始是暂停的。
colorTween.TogglePause();
让颜色循环暂停或开始
emissionTween = mat.DOColor(new Color(0, 0, 0, 0), "_EmissionColor", 1).SetLoops(-1, LoopType.Yoyo).Pause();
相比上面的方法多了一个第二个参数,第二个参数是位图的名字,材质位图将不断闪烁(第一个参数不要动)
emissionTween.TogglePause();
将位图的闪烁暂停或开始
offsetTween = mat.DOOffset(new Vector2(10, 10), 1);
第一个参数是UV的目标数值,第二个是到达这个数值需要的时间,比如现在的参数就是在1秒之内将UV到达10,10
offsetTween = mat.DOOffset(new Vector2(1, 1), 1).SetLoops(-1, LoopType.Incremental).Pause()
.SetLoops开始循环,第一个参数为变回去的时间,.Pause()为开始时暂停
第二个参数为枚举:
LoopType.Restart:UV由0缓慢变为1后,瞬间变回0,然后再缓慢变回1。
LoopType.Yoyo:UV由0缓慢变为1后,再缓慢由1变回0,再缓慢由0变回1。
LoopType.Incremental:UV将按照之前的比率无限增长。
offsetTween = mat.DOOffset(new Vector2(1, 1), 1).SetLoops(-1, LoopType.Incremental).Pause().SetEase(Ease.Linear);
.SetEase(Ease.Linear) 为让UV持续匀速改变,不传效果会很怪,也可以传入别的枚举,别的枚举效果不明。
offsetTween.TogglePause();
让UV循环暂停或开始
让一个物体循环在一个路径上移动
Tween path;
声明变量,这个变量可以用来保存DoTween执行的方法,并为其添加新要素
Tween path = gameobject.DOPath(Vector3[], 4, PathType.CatmullRom)
让自身随着传入的第一个参数的路径点集合移动,第二个参数为移动时间,第三个参数为枚举,最好固定为PathType.CatmullRom。
Tween t = target.DOPath(waypoints, 4, PathType.CatmullRom).SetOptions(true)
SetOptions(true)传入true可以让首尾自动相连
Tween t = target.DOPath(waypoints, 4, PathType.CatmullRom).SetOptions(true).SetLookAt(0.001f);
.SetLookAt(0.001f);可以让物体在移动时自动转向,参数越小转动速度越快,0.001f较为合适。
t.SetEase(Ease.Linear)
等同于写在方法句子的后面,设置移动状态,传入的Ease.Linear枚举为保持匀速直线运动,别的枚举暂不明。
t.SetEase(Ease.Linear).SetLoops(-1);
.SetLoops(-1),让移动循环
UGUI文本Text动画
text.DOText("This text will replace the existing one", 2)
将文本在2秒内覆写为参数一的文本
relativeText.DOText(" - This text will be added to the existing one", 2).SetRelative()
2秒内在文本后方加入参数一的文字
scrambledText.DOText("This text will appear from scrambled chars", 2, true, ScrambleMode.All)
在2秒内写入参数一文本,同时每秒将乱码填充到未改写部分
UGUI位置渐变动画
rectTransform.DOMove(new Vector3(x, y, z), 2);
让UI的位置移动到参数一的位置,速度是参数二(注意点:传入的第一个参数和自身的锚点位置也就是PosX,PosY没有关系,默认是从屏幕左下角开始计算的,但是和自己的中心点Pivot有关系,正确的操作姿势应该是将锚点设置到左下角,中心点调成0,0)
rectTransform.DOMove(new Vector3(x*Screen.width/width, y*Screen.height/height, z), 2);
适用于UI自适应的写法,让移动到的位置乘Screen.position再除以自己在制作时设定的场景分辨率,这样分辨率改变时移动的目标位置不会偏离
rectTransform.DOMove(new Vector3(x, y, z), 2);
rectTransform.DOMove(new Vector3(x, Szcreen.height - y, z), 2);
rectTransform.DOMove(new Vector3(Screen.width - x,y, z), 2);
rectTransform.DOMove(new Vector3(Screen.width - x, Screen.height - y, z), 2);
适用于屏幕四个角落的对齐,只需要对其左下角,然后经过处理就能克隆到其他角落,从上到下分别是:左下角,左上角,右下角,右上角。根据不同的角落需要重新设定不同的中心点(和上面自适应结合就是x*Screen.width/width和y*Screen.height/height用上面替换掉x和y)
UGUI图片Image颜色动画
image.DOFade(0, 1.5f);
使一个图片逐渐透明,第一个参数为透明的值,传入100为半透明,第二个参数为渐变到终点的时间。
image.DOFillAmount(0, 1.5f)
改变目标的FillAmount,第一个参数为到达的值,第二个参数为渐变到终点的时间。