Dotween常⽤⽅法详解(借鉴⼤神,仅作为笔记⽤)⼀、Unity常⽤组件拓展⽅法
(1) Transform拓展⽅法
1)Position
1)改变世界坐标
移动⽅法,第⼀个参数是要移动到的⽬标点,不是移动这个向量的距离
transform.DOMove(new Vector3(1, 1, 1), 2);
只控制x轴上的移动,其他两个⽅向同理
transform.DOMoveX(1, 2);
汽车打不着火2)改变局部坐标
transform.DOLocalMove(new Vector3(1, 1, 1), 2);
transform.DOLocalMoveX(1, 2);
2)Rotation
1)世界旋转
旋转到给定的值,改变的是欧拉⾓
transform.DORotate(new Vector3(0, 90, 0), 2);
旋转到给定的值,改变的是四元数
transform.DORotateQuaternion(new Quaternion(0.1f, 0.1f, 0.1f, 0.1f), 2);
2)局部旋转
旋转到给定的值,改变的是欧拉⾓
transform.DOLocalRotate(new Vector3(0, 90, 0), 2);
旋转到给定的值,改变的是四元数
transform.DOLocalRotateQuaternion(new Quaternion(0.1f, 0.1f, 0.1f, 0.1f), 2);
在给定时间内,平滑的让⾃⾝的z轴正⽅向指向⽬标点
transform.DOLookAt(new Vector3(0, 0, 0), 2);
3) Scale
同上⾯⼀样,这⾥改变物体的缩放到⽬标值
transform.DOScale(new Vector3(2, 2, 2), 2);
其他两个轴向同理
transform.DOScaleX(3, 2);
4) Punch
第⼀个参数 punch:表⽰⽅向及强度
第⼆个参数 duration:表⽰动画持续时间
第三个参数 vibrato:震动次数
第四个参数 elascity: 这个值是0到1的
当为0时,就是在起始点到⽬标点之间运动
不为0时,会把你赋的值乘上⼀个参数,作为你运动⽅向反⽅向的点,物体在这个点和⽬标点之间运动
transform.DOPunchPosition(new Vector3(0, 1, 0), 2, 2, 0.1f);
transform.DOPunchRotation(new Vector3(0, 90, 0), 2, 2, 0.1f);
transform.DOPunchScale(new Vector3(2, 2, 2), 2, 2, 0.1f);
以position为例,elascity的取值是 0 到 1 的
elascity为0时,物体就在起始点和⽬标点之间运动
elascity不为0时,会⾃动计算,产⽣⼀个反向点,数值越⼤⽅向点离的越远
5)Shake
参数:持续时间,⼒量,震动,随机性,淡出
⼒量:实际就是震动的幅度,可以理解成相机施加的⼒的⼤⼩使⽤Vector3可以选择每个轴向不同的强度
震动:震动次数
随机性:改变震动⽅向的随机值(⼤⼩:0~180)
淡出:就是运动最后是否缓慢移动回到原本位置
transform.DOShakePosition(1, 5, 10, 50, true);
transform.DOShakeRotation(3);
transform.DOShakeScale(3);
6)Blend
带Blend名称的⽅法,允许混合动画
原本同时执⾏两个Move⽅法,只会执⾏最新的⼀个动画命令
例如:
transform., 2);
transform. * 2, 2);
结果是物体运动到了(2,2,2)坐标上
DOBlendableMoveBy⽅法有两个特点
1)允许多个同时执⾏
例如:
transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);
transform.DOBlendableMoveBy(new Vector3(-1, 0, 0), 1);
假设其实点为(0,0,0),最后动画停⽌时的坐标就是(0,1,1)
2)它是增量动画
transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);
假设其实点为(1,1,1),最后动画停⽌时的坐标就是(2,2,2)
它的参数不是⽬标点,⽽是要移动的量
以下三个函数同理
transform.DOBlendableRotateBy()
transform.DOBlendableScaleBy()
transform.DOBlendablePunchRotation()
(2) Camera拓展⽅法
1)调整屏幕视⾓的宽⾼⽐第⼀个参数是宽⾼的⽐值
camera.DOAspect(0.6f, 2);
2)改变相机background参数的颜⾊
camera.DOColor(Color.blue, 2);
3)改变相机近切⾯的值
羽毛球男子单打camera.DONearClipPlane(200, 2);
4)改变相机远切⾯的值
camera.DOFarClipPlane(2000, 2);
5)改变相机FOV的值
camera.DOFieldOfView(30, 2);
6)改变相机正交⼤⼩
camera.DOOrthoSize(10, 2);
7)按照屏幕像素计算的显⽰范围
camera.DOPixelRect(new Rect(0f, 0f, 600f, 500f), 2);
8)按照屏幕百分⽐计算的显⽰范围
camera.DORect(new Rect(0.5f, 0.5f, 0.5f, 0.5f), 2);
9)相机震动
相机震动效果参数:持续时间,⼒量,震动,随机性,淡出
⼒量:实际就是震动的幅度,可以理解成相机施加的⼒的⼤⼩使⽤Vector3可以选择每个轴向不同的强度震动:震动次数
随机性:改变震动⽅向的随机值(⼤⼩:0~180)
淡出:就是运动最后是否缓慢移动回到原本位置
camera.DOShakePosition(1, 10, 10, 50, fal);
(3) Material拓展⽅法
1)改变颜⾊
material.DOColor(Color.black, 2);
2)按照shader的属性名,修改颜⾊
material.DOColor(Color.clear, "_Color", 2);
3)修改alpha值
material.DOFade(0, 2);
4)颜⾊渐变
Gradient是unity的渐变编辑器(下⾯有渐变编辑器的图)
material.DOGradientColor(Gradient, "_Color", 3);
5)改变材质offt的值
material.DOOfft(new Vector2(1, 1), 2);
6)改变提供的shader属性的名称对应的Vector4值
material.DOVector(new Vector4(0, 0, 0, 1), "_Color", 3);
7)颜⾊混合
跟位置混合动画同理,可以同时执⾏⽽不⼲扰,产⽣混合在⼀起的颜⾊
material.d, "_Color", 3);
渐变编辑器
(4) Text拓展⽅法
头三个都是常规⽅法,不多介绍了
text.DOColor(Color.black, 2);
text.DOFade(0, 2);
text.DOBlendableColor(Color.black, 2);
这个⽅法⽐较有意思
是把第⼀个参数传⼊的内容按照时间,⼀个字⼀个字的输⼊到⽂本框中
text.DOText("context", 2);
⼆、Dotween常⽤⽅法
(1) Sequence
Sequence quence = DOTween.Sequence();
1)添加动画到队列中
quence.Append(transform., 2));
2)添加时间间隔
quence.AppendInterval(1);
3)按时间点插⼊动画
第⼀个参数为时间,此⽅法把动画插⼊到规定的时间点
以这句话为例,它把DORotate动画添加到此队列的0秒时执⾏,虽然它不是最先添加进队列的quence.Inrt(0, transform.DORotate(new Vector3(0, 90, 0), 1));
4)加⼊当前动画
Join会加⼊和让动画与当前正在执⾏的动画⼀起执⾏
如下两⾏代码,DOMove会和DOScale⼀起执⾏
quence.Append(transform.DOScale(new Vector3(2, 2, 2), 2));
quence.Join(transform., 2));
5)预添加动画
预添加会直接添加动画到Append的前⾯,也就是最开始的时候
quence.Prepend(transform. * 0.5f, 1));
这⾥需要特别说⼀下预添加的执⾏顺序问题
它这⾥也采取了队列的性质,不过,预添加与原本的的队列相⽐是⼀个反向队列
例如:
Sequence quence = DOTween.Sequence();会计属于管理学还是经济学
quence.Append(transform., 2));
quence.Prepend(transform.DOMove(-*2, 2));
quence.PrependInterval(1);净慈寺送林子方
执⾏顺序是 PrependInterval----Prepend-----Append
就是最后添加的会在队列的最顶端
6)预添加时间间隔
quence.PrependInterval(1);
回调函数
1)预添加回调
quence.PrependCallback(PreCallBack);
2)在规定的时间点加⼊回调
quence.InrtCallback(0, InrtCallBack);
3)添加回调
quence.AppendCallback(CallBack);
(2) Tweener的设置
TweenParams para = new TweenParams();
1)设置动画循环
第⼀个参数是循环次数 -1代表⽆限循环
第⼆个参数是循环⽅式
Restart 重新开始
Yoyo 从起始点运动到⽬标点,再从⽬标点运动回来,这样循环Incremental ⼀直向着运动⽅向运动
para.SetLoops(-1, LoopType.Yoyo);
2)设置参数
transform., 2).SetAs(para);
3)设置⾃动杀死动画
transform., 1).SetAutoKill(true);
4)from补间
例如;
transform., 2).From(true);
From参数 isRelative(相对的):
为true,传⼊的就是偏移量,即当前坐标 + 传⼊值 = ⽬标值
个人经历简述为fale,传⼊的就是⽬标值,即传⼊值 = ⽬标值
5)设置动画延时
transform., 2).SetDelay(1);
6)设置动画运动以速度为基准
例如:
transform., 1).SetSpeedBad();
使⽤SetSpeedBad时,移动⽅式就变成以速度为基准
原本表⽰持续时间的第⼆个参数,就变成表⽰速度的参数,每秒移动的单位数7)设置动画ID
transform., 2).SetId("Id");
8)设置是否可回收
为true的话,动画播放完会被回收,缓存下来,不然播完就直接销毁transform., 2).SetRecyclable(true);
9)设置动画为增量运动
例如:
transform., 2).SetRelative(true);
SetRelative参数 isRelative(相对的):
为true,传⼊的就是偏移量,即当前坐标 + 传⼊值 = ⽬标值
为fale,传⼊的就是⽬标值,即传⼊值 = ⽬标值
10)设置动画的帧函数
短跑视频
例如:
transform., 2).SetUpdate(UpdateType.Normal, true);
第⼀个参数 UpdateType :选择使⽤的帧函数
UpdateType.Normal:更新每⼀帧中更新要求。
UpdateType.Late:在LateUpdate调⽤期间更新每⼀帧。
UpdateType.Fixed:使⽤FixedUpdate调⽤进⾏更新。
UpdateType.Manual:通过⼿动DOTween.ManualUpdate调⽤进⾏更新。
第⼆个参数:为TRUE,则补间将忽略Unity的Time.timeScale
(3) Ea 运动曲线的设置
1)以Ea枚举作为参数
例如:
transform., 2).SetEa(Ea.Flash, 3, 0f);
第⼆个参数 Amplitude(振幅):实际就是移动次数,起始点移动到⽬标算移动⼀次,再移动回来移动两次
第三个参数 period 值的范围是 - 1~1
值 > 0时,为活动范围的衰减值,活动范围会由⼤变⼩
值 = 0时,就是均匀的在起始坐标和⽬标坐标之间运动
值 < 0时,会施加⼀个向⽬标坐标的⼀个⼒,活动范围⼀点点增⼤,最后逼近⽬标点
这两个参数只对Flash, InFlash, OutFlash, InOutFlash这四种曲线有⽤,其他的曲线起作⽤的就只有Ea枚举参数2)使⽤AnimationCurve当作参数
例如:
transform. * 2, 1).SetEa(curve);
AnimationCurve 横轴是时间,不过不是具体的时间,⽽是时间⽐例
AnimationCurve 纵轴是倍数
假设纵轴的值为v,传⼊DOMove的第⼀个参数endValue是e,起始点坐标是s
此物体最后动画结束时的实际坐标即为 v* (e -s)+ s
3)以回调函数为参数
例如:
transform. * 2, 1).SetEa(MyEaFun);
//返回值是运动距离的百分⽐值应为0~1之间,最后的值需为1,不然停留的位置不会是⽬标位置
private float MyEaFun(float time, float duration, float overshootOrAmplitude, float period)
{
return time / duration;
}
(4) 回调函数
1)动画完成回调
transform., 2).OnComplete(() => { });
2)动画被杀死时回调
transform., 2).OnKill(() => { });
3)动画播放时回调,暂停后重新播放也会调⽤
transform., 3).OnPlay(() => { });
4)动画暂停时回调
transform., 2).OnPau(() => { });
5)动画回退时回调
以下情况会被调⽤
使⽤DORestart重新播放时
使⽤Rewind倒播动画完成时
使⽤DOFlip翻转动画完成时
使⽤DOPlayBackwards反向播放动画完成时
转基因水稻transform., 2).OnRewind(() => { });
6)只在第⼀次播放动画时调⽤,在play之前调⽤
transform., 2).OnStart(() => { });
7)完成单个循环周期时触发
transform., 2).OnStepComplete(() => { });
8)帧回调
transform., 2).OnUpdate(() => { });
9)在路径动画时,改变⽬标点时的回调,参数为当前⽬标点的下标
transform., 2).OnWaypointChange((value) => { });
(5) 动画控制⽅法
1)播放
transform.DOPlay();
2)暂停
transform.DOPau();
3)重播
transform.DORestart();风寒感冒颗粒成分