本文仅用于记录和分享学习过程,如有错误望各位指正
前言
本文主要参考自DOTween官方文档 dotween.demigiant.com/documentati…
准备工作
- 导入DOTween到项目中
- 在Tools/Demigiant下打开DOTween工具面板设置Unity版本信息(在首次导入时会自动弹出)
单击Setup DOTween(绿色)按钮即可,右侧Preferences面板可更改部分全局设置,若无需要可关闭
- 在脚本中导入DOTween的命名空间
using DG.Tweening;
- 使用
Init
函数设置部分全局选项(可选)
DOTween.Init(autoKillMode, useSafeMode, logBehaviour);
常用扩展方法
transform扩展方法:
示例
transform.DOMove(Vector3.one, 1);
DOMove(Vector3 to, float duration, bool snapping)
在指定时间内移动到目标位置
to:目标位置
duration:指定时间
snapping:若指定为true,该方法将以整数点过度
该方法还存在DOMoveX/DOMoveY/DOMoveZ的衍生方法,仅向指定轴方向移动
DORotate(Vector3 to, float duration, RotateMode mode)
在指定时间内旋转物体到给定值
to:目标角度(欧拉角)
duration:指定时间
mode:指定旋转模式
该方法还存在DORotateQuaternion的衍生方法,以四元数作为参数
DOLookAt(Vector3 towards, float duration, AxisConstraint axisConstraint = AxisConstraint.None, Vector3 up = Vector3.up)
在指定时间内旋转物体朝向目标位置
towards:目标位置
duration:给定时间
axisConstraint:旋转的约束轴
up:定义向上方向的矢量
DOScale(float/Vector3 to, float duration)
在指定时间内缩放物体到给定值
DOPunchPosition(Vector3 punch, float duration, int vibrato, float elasticity, bool snapping)
DOPunchRotation(Vector3 punch, float duration, int vibrato, float elasticity)
DOPunchScale(Vector3 punch, float duration, int vibrato, float elasticity)
向给定值弹性冲击 位置/旋转/缩放
punch:冲击的方向和强度
duration:给定时间
vibrato:冲击次数
elasticity:一个0-1之间的值,代表冲击过程中超出初始值的比率,若为0则仅在初始值和给定值之间冲击
DOShakePosition(float duration, float/Vector3 strength, int vibrato, float randomness, bool snapping, bool fadeOut)
DOShakeRotation(float duration, float/Vector3 strength, int vibrato, float randomness, bool fadeOut)
DOShakeScale(float duration, float/Vector3 strength, int vibrato, float randomness, bool fadeOut)
以给定的力震动 位置/旋转/缩放
duration:给定时间
strength:给定的力,若为Vector3值则还代表每个轴的震动强度
vibrato:震动次数
randomness:一个0-180之间的值,代表震动的随机性,若为0则仅在单一轴上震动
fadeOut:若设置为true震动动画将平滑淡出
DOPath(Vector3[] waypoints, float duration, PathType pathType = Linear, PathMode pathMode = Full3D, int resolution = 10, Color gizmoColor = null)
在指定时间内沿给定路径移动物体
waypoints:路径点数组
duration:给定时间
pathtype:路径类型,直线/曲线(自动过渡)/贝塞尔曲线(每三个为一组传入)
pathMode:用于确定正确的LookAt,分别有 3D/side-scroller 2D/top-down 2D
resolution:路径的分辨率(曲线路径使用),值越高越平滑
Camera扩展方法
示例
Camera.main.DOColor(Color.blue, 1);
DOColor(Color to, float duration)
在指定时间内改变相机背景颜色到给定颜色
DOOrthoSize(float to, float duration)
在指定时间内改变相机的正交大小到给定值
DOShakePosition(float duration, float/Vector3 strength, int vibrato, float randomness, bool fadeOut)
DOShakeRotation(float duration, float/Vector3 strength, int vibrato, float randomness, bool fadeOut)
在指定时间内震动相机的 位置/旋转
Material扩展方法
示例
GetComponent<MeshRenderer>().material.DOFade(0, 1);
DOColor(Color to, float duration)
DOColor(Color to, string property, float duration)
DOColor(Color to, int propertyID, float duration)
在指定时间内改变材质颜色到给定颜色
可使用shader的属性名或ID指定目标
DOFade(float to, float duration)
DOFade(float to, string property, float duration)
DOFade(float to, int propertyID, float duration)
在指定时间内改变材质的alpha值到给定值
DOBlendableColor(Color to, float duration)
DOBlendableColor(Color to, string property, float duration)
DOBlendableColor(Color to, int propertyID, float duration)
混合方法,允许与其他混合方法协同执行改变颜色
UI组件扩展方法
示例
GetComponent<Text>().DOText("<color=blue>Hello</color> <size=50>World</size>", 1, true, ScrambleMode.Lowercase);
Image:
DOFillAmount(float to, float duration)
在指定的时间内改变Image的填充度到给定值
ScrollRect
DONormalizedPos(Vector2 to, float duration, bool snapping)
DOHorizontalNormalizedPos(float to, float duration, bool snapping)
DOVerticalPos(float to, float duration, bool snapping)
移动显示区域,可指定更改X或Y轴区域
Slider
DOValue(float to, float duration, bool snapping = false)
在指定时间内更改滑动条的值
Text
DOText(string to, float duration, bool richTextEnabled = true, ScrambleMode scrambleMode = ScrambleMode.None, string scrambleChars = null)
在指定的时间内将文本逐渐替换为给定字符串
to:给定字符串
duration:给定时间
richTextEnabled:设置为富文本
scrambleMode:替换模式,用一个不断变化的随机字符串做过度替换为目标字符串,类型可以为 大写/小写/数字/全部/自定义字符
scrambleChars:自定义替换字符,在使用Custom模式时将只使用这些字符做过度替换
Set设置
在Tween对象后加上Set用于设置此对象的属性
示例
transform.DOMove(Vector3.one, 1).SetEase(Ease.InOutElastic);
SetAs
SetAs(Tween tween \ TweenParams tweenParams)
将该Tween设置和回调等参数替换为给定Tween的设置和回调
SetAutoKill
SetAutoKill(bool autoKillOnCompletion = true)
若设置为false该Tween完成时不会被销毁,可以重用这个Tween
SetEase
SetEase(Ease easeType \ AnimationCurve animCurve \ EaseFunction customEase)
设置Tween的缓动曲线
缓动函数:通过时间的变化控制参数值变化的速率。
参数可从已有的曲线(Ease)中选择或自定义曲线(AnimationCurve)/回调函数(EaseFuction)
使用已有缓动曲线:
transform.DOMove(Vector3.one, 1).SetEase(Ease.InElastic);
缓动曲线效果:
图示来源 easings.net/cn
使用AnimationCurve使用自定义曲线:
public AnimationCurve curve;
void Start()
{
transform.DOMove(Vector3.one, 1).SetEase(curve);
}
使用自定义回调函数
EaseFunction fuction = (time, duration, overshootOrAmplitude, period) => time / duration;
transform.DOMove(Vector3.one, 1).SetEase(fuction);
SetId
SetId(object id)
设置Tween的ID,在使用某些静态方法(如
DOTween.Pause()
)的时候即可使用ID作为过滤器
SetLoops
SetLoops(int loops, LoopType loopType = LoopType.Restart)
设置Tween的循环次数和循环选项
loops:Tween的循环次数,若设置为-1则为无限循环
loopType:循环选项,决定一次动画结束时循环中的下次动画如何运作,有 Yoyo(往复)/Restart(重新开始)/Incremental(增量)三个选项
SetRecyclable
SetRecyclable(bool recyclable)
设置Tween的自动回收行为,若设置为true动画被Kill后将会被回收
SetRelative
SetRelative(bool isRelative = true)
若设置为true将设置为增量动画
SetUpdate
SetUpdate(UpdateType updateType, bool isIndependentUpdate = false)
设置Tween的更新函数
updateType:Tween的更新函数,可在 Update/LateUpdate/FixUpdate/DOTween.ManualUpdate中进行更新
isIndependentUpdate:若设置为true将忽略Unity的timescale
SetDelay
SetDelay(float delay)
设置延时启动
On回调
通过传入回调函数设置Tween某时刻会执行的行为 示例
transform.DOMove(Vector3.one, 1).OnComplete(() => transform.DOScale(new Vector3(.5f, .5f, .5f), 1));
//完成时触发,若有循环则在所有循环执行结束后触发
OnComplete(TweenCallback callback)
//被Kill时触发
OnKill(TweenCallback callback)
//播放时触发,在暂停后播放也会触发
OnPlay(TweenCallback callback)
//暂停时触发,若Tween的自动销毁(autokill)为false则动画完成时也会触发
OnPause(TweenCallback callback)
//回退时触发,回退的情况有:
//通过ReStart重新开始动画时
//通过ReWind倒带动画完成时
//通过Flip翻转动画完成时
//通过PlayBackwards反向动画完成时
OnRewind(TweenCallback callback)
//开始时触发,即第一次播放
OnStart(TweenCallback callback)
//每次动画循环完成时都会触发一次
OnStepComplete(TweenCallback callback)
//执行过程中每帧触发
OnUpdate(TweenCallback callback)
//使用DoPath函数过程中路径点发生变化时触发,参数为当前路径点的下标
OnWaypointChange(TweenCallback<int> callback)
Tween控制
通过函数控制动画播放
//示例
Tween tween = transform.DOMove(Vector3.one, 1).Pause();
tween.Play();
DOTween.PlayBackwardsAll();
//翻转动画方向
FlipAll/Flip()
//将动画发送到结束位置(若为无限循环则无效果)
CompleteAll/Complete(bool withCallbacks = false)
//将动画发送到指定时间位置,andPlay若为true则在跳转后将立即播放,否则暂停
GotoAll/Goto(float to, bool andPlay = false)
//立即Kill动画,若complete为true则在Kill前将立即完成该动画
//可传入Tween的ID作为过滤器
KillAll/Kill(bool complete = true, params object[] idsOrTargetsToExclude)
//暂停动画
PauseAll/Pause()
//播放动画
PlayAll/Play()
//往回播放动画
PlayBackwardsAll/PlayBackwards()
//往前播放动画
PlayForwardAll/PlayForward()
//从头播放动画,若includeDelay为true可设置从头播放的延时时间changeDelayTo
RestartAll/Restart(bool includeDelay = true, float changeDelayTo = -1)
//倒退动画到起点并暂停
RewindAll/Rewind(bool includeDelay = true)
//流畅的倒退动画到起点并跳过所有循环(增量除外)
SmoothRewindAll/SmoothRewind()
//若动画暂停则播放动画,若动画正在播放则暂停动画
TogglePauseAll/TogglePause()