Unity相关插件|猿创征文| Unity~DOTween相关使用


@作者 : SYFStrive


Unity插件
想做出以下效果
Unity插件相关专栏
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片


Unity插件相关专栏()

目录
  • DOTween导入
  • DOT~Unity自身的扩展方法
    • DOT~Transform 相关扩展方法
    • 1、DOTween的简单应用
    • 2、Punch 扩展方法
    • 3、Shake 扩展方法
    • 4、Blend 扩展方法
    • DOT~Material 扩展方法
    • Camera 扩展方法
    • Text 扩展方法
  • DOTween相关扩展方法
    • 1、Sequence扩展方法
    • 2、Tweener相关使用
    • 3、Ease 运动曲线的设置
    • 4、DOTween动画执行回调
    • 5、DOTween 类方法使用
    • 6、DOTween 动画进度状态的判断
    • 7、DOTween携程
    • 8、DOTween路径动画
  • 最后

DOTween导入 Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

DOT~Unity自身的扩展方法 DOT~Transform 相关扩展方法 通过DOT~Transform可以让我们在开发中快速、高效,完成关于Transform相关动画。
1、DOTween的简单应用 实现功能:简单实现移动 && 旋转 && 缩放
实现步骤:导入命名空间(using DG.Tweening; ) 使用DOTween
代码及详细说明如
using UnityEngine; using DG.Tweening; public class DOTween01 : MonoBehaviour { private void Start() { 移动到原点,移动三秒 //transform.DOMove(Vector3.one, 3); 单方向移动 //transform. 相对于局部 //transform.DOLocalMove(Vector3.one, 3); //transform.DOLocalMoveX(5,3); 旋转的度数、旋转三秒 //transform.Rotate(new Vector3(50, 50, 50), 3); //缩放三倍,使用时间三秒 transform.DOScale(new Vector3(3,3,20),3); } }

移动效果如 (旋转缩放类似)
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

2、Punch 扩展方法 代码及详细说明如
#region Punch函数 //第一个参数 punch:表示方向及强度 //第二个参数 duration:表示动画持续时间 //第三个参数 vibrato:震动次数 //第四个参数 elascity: 这个值是0到1的 //当为0时,就是在起始点到目标点之间运动 //不为0时,会把你赋的值乘上一个参数,作为你运动方向反方向的点,物体在这个点和目标点之间运动 //移动旋转缩放都是类似的 transform.DOPunchPosition(new Vector3(0, 8, 0), 3f, 100, 0.1f); transform.DOPunchRotation(new Vector3(0, 90, 0), 3, 1100, 0.1f); transform.DOPunchScale(new Vector3(2, 2, 2), 2, 100, 0.1f); #endregion

效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

3、Shake 扩展方法 代码及详细说明如
#region Shake //参数:持续时间,震动强度,震动频次,随机角度,淡出 //震动:强度 //震动:震动次数 //随机性:随机角度 //淡出:就是运动最后是否缓慢移动回到原本位置 //移动旋转缩放都是类似的 //transform.DOShakePosition(2, 0.5f, 60, 90); //transform.DOShakeRotation(3); //transform.DOShakeScale(3); #endregion

效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

4、Blend 扩展方法 代码及详细说明如
using UnityEngine; using DG.Tweening; public class asd : MonoBehaviour { private void Start() { //DOBlendableMoveBy方法有两个特点 //1、允许多个同时执行 //如 transform.DOBlendableMoveBy(new Vector3(5, 5, 5), 1); //transform.DOBlendableMoveBy(new Vector3(5, 0, 0), 1); //假设其实点为(0,0,0),最后动画停止时的坐标就是(10,5,5) //2、 它是增量动画 //transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1); //假设其实点为(1,1,1),最后动画停止时的坐标就是(2,2,2) //3、移动,选装,缩放类似 //transform.DOBlendableLocalMoveBy(new Vector3(5, 5, 5), 1); //transform.DOBlendableLocalRotateBy(new Vector3(1, 1, 1), 1); //transform.DOBlendableScaleBy(new Vector3(1, 1, 1), 1); } }

① 允许多个同时执行 如下:
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

② 它是增量动画
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

③ 效果如下:
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

DOT~Material 扩展方法 代码及详细说明如
//1、改变颜色 如 (颜色,2秒渐变的时间) //material.DOColor(Color.red, 2); //2、按照Szhader的属性名,修改颜色 如 //material.DOColor(Color.red, "_Color", 2); //3、修改alpha值 (也可以通过Szhader的属性名修改) //方法一 如 //material.DOColor(Color.clear, 2); //方法二 如 //material.DOFade(0, 2); //4、颜色渐变 如 //Gradient是Unity的渐变编辑器(通过渐变然后赋值给材质球(也可以通过Szhader的属性名修改)) //material.DOGradientColor(gradient, 3); //5、改变材质offset的值 如 //material.DOOffset(new Vector2(50, 1), 5f); //6、改变提供的Shader属性的名称对应的Vector4值 如 //material.DOVector(new Vector4(0, 0, 0, 0), "_Color", 3); //7、颜色混合 如 //跟位置混合动画同理,可以同时执行而不干扰,产生混合在一起的颜色 //material.DOBlendableColor(Color.red, "_Color", 3); //material.DOBlendableColor(Color.white, "_Color", 3); //material.DOBlendableColor(Color.yellow, "_Color", 3); //material.DOBlendableColor(Color.blue, "_Color", 3);

① 效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

② 效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

③ 效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

④ 效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

⑤ 效果如

⑥ 效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

⑦ 效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

Camera 扩展方法 代码及详细说明如
//1、调整屏幕视角的宽高比 第一个参数是宽高的比值 //camera.DOAspect(1f, 2); //以1:1 进行缩放//2、摄像机的颜色渐变 //camera.DOColor(Color.red, 2); //3、摄像机的近斜面 与 远斜面 //camera.DONearClipPlane(1000, 2); //camera.DOFarClipPlane(3000, 5); //4、摄像机的透视 与 正交 //camera.DOFieldOfView(0, 2); //5、按照屏幕百分比计算的显示范围 && 按照屏幕像素计算的显示范围 //Camera1.DORect(new Rect(0, 0, 0.5f, 0.5f), 2); //Camera2.DORect(new Rect(0.5f, 0f, 0.5f, 0.5f), 2); //Camera3.DORect(new Rect(0.5f, 0.5f, 0.5f, 1), 2); //Camera4.DORect(new Rect(0, 0.5f, 0.5f, 1), 2); //camera.DOPixelRect(new Rect(0f, 0f, 600f, 500f), 2); //7、相机震动 //相关参数说明 如 //持续时间震动强度震动次数随机角度值是否淡出入 camera.DOShakePosition(1.5f,6,10,30,false);

① 效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

③ 效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

④ 效果如(视域大小)
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

透视如下(视域大小)

正交如下:

⑤ 效果如 (多个相机操作)
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

⑥ 效果如 (四倍快乐)

⑦ 效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

Text 扩展方法
#region Text扩展方法 //获取相关文本 TextAsset textAsset = Resources.Load("坚持锻炼"); //如之前的方法 (类似) //text.DOColor(Color.black, 2); //text.DOFade(0, 2); //text.DOBlendableColor(Color.black, 2); //……//★ 对话的神插件 (需要读取的内容,多少秒读完) text.DOText(textAsset.ToString(), 20); #endregion

效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

DOTween相关扩展方法 1、Sequence扩展方法 代码及详细说明如
//先进先出 //DOTween~队列相关使用 Sequence quence = DOTween.Sequence(); 1、添加动画到队列中足以执行 //quence.Append(transform.DOMove(Vector3.one, 2)); 2、添加时间间隔1秒然后继续执行以下动画 //quence.AppendInterval(1); //quence.Append(transform.DOMove(new Vector3(20, 0, 0), 1)); //quence.Append(transform.DOMove(new Vector3(50, 0, 0), 1)); //3、按时间点插入动画把第0秒的动画替换掉 //quence.Insert(0, transform.DOMove(new Vector3(150, 0, 0), 1)); //4、如下两行代码,DOMove会和DOScale一起执行(执行变大之后便会原来的大小) //quence.Append(transform.DOScale(Vector3.one*2, 2)); //quence.Join(transform.DOMove(Vector3.zero, 2)); //3 VS 4(效果差不多)//5、预添加动画 //预添加会直接添加动画到Append的前面也就是最开始的时候(后进先出) //quence.Prepend(transform.DOScale(Vector3.one * 0.5f, 1)); //顺序问题如 //Sequence quence = DOTween.Sequence(); //quence.Append(transform.DOMove(Vector3.one, 2)); //quence.Prepend(transform.DOMove(-Vector3.one * 2, 2)); //quence.PrependInterval(1); //预添加 //执行顺序是 PrependIntervalPrependAppend (后进先出)//回调函数// 1、预添加回调预加载 quence.PrependCallback(PreCallBack); // 2、在规定的时间点加入回调第几秒插入回调 quence.InsertCallback(5, InsertCallBack); // 3、添加回调 quence.AppendCallback(CallBack);

效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

2、Tweener相关使用 代码及详细说明如
//1、设置动画循环 //玩法1 //transform.DOMove(Vector3.one, 1).SetLoops(15,LoopType.Yoyo); //SetLoops第一个参数是循环次数(- 1)代表无限循环 //SetLoops第二个参数是循环方式(三种如) //Restart 重新开始 //Yoyo从起点到目标点回到起点(反复执行) //Incremental向着运动方向运动//玩法2 //TweenParams tweenParams = new TweenParams(); //tweenParams.SetLoops(-1,LoopType.Yoyo); //transform.DOMove(Vector3.one, 0.2f).SetAs(tweenParams); //2、动画完成之后执行销毁 //transform.DOMove(Vector3.one, 1).SetAutoKill(true); //3、From (反向运动,把起始点当成目标点) //如(向DOMove第一个参数移动) //transform.DOMove(Vector3.one, 2).From(true); //From参说明如 //为true,传入的就是偏移量,即当前坐标 + 传入值 = 目标值 //为falese,传入的就是目标值,即传入值 = 目标值//4、设置动画延时 //transform.DOMove(Vector3.one, 2).SetDelay(1); //5、设置动画运动速度 添加了SetSpeedBased(基于速度移动) //DOMove第二个参数原本表示持续时间的,就变成表示速度的参数,每秒移动的单位数 //transform.DOMove(Vector3.one, 1).SetSpeedBased(); //6、设置动画ID //transform.DOMove(Vector3.one, 2).SetId("Id"); //7、可回收对象 //为true的话,动画播放完会被回收,缓存下来,不然播完就直接销毁 //transform.DOMove(Vector3.one, 2).SetRecyclable(true); //8、设置动画为增量运动 //如 //transform.DOMove(Vector3.one, 10).SetRelative(true); //SetRelative参说明如 //为true,传入的就是偏移量,即当前坐标 + 传入值 = 目标值 //为falese,传入的就是目标值,即传入值 = 目标值//9、设置动画的帧函数 // 例如: //transform.DOMove(Vector3.one, 2).SetUpdate(UpdateType.Normal, true); //第一个参数 UpdateType :选择使用的帧函数 //UpdateType.Normal:更新每一帧中更新要求。 //UpdateType.Late:在LateUpdate调用期间更新每一帧。 //UpdateType.Fixed:使用FixedUpdate调用进行更新。 //UpdateType.Manual:通过手动DOTween.ManualUpdate调用进行更新。 //第二个参数:为true时,则将忽略Unity的Time.timeScale(时间缩放)

① 玩法1效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

② 玩法2效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

……
3、Ease 运动曲线的设置 代码及详细说明如
//1、如 SetEase第一个参数是类型、第二给参数(移动次数(来回算两次))、第三个参数(-1~1之间进行变化) transform.DOMove(Vector3.one, 2).SetEase(Ease.Flash, 3, 0f); // 第三个参数 Period 值的范围是 -1~1 //值 > 0时,范围会由大变小 //值 = 0时,起始坐标和目标坐标之间运动 //值 < 0时,施加向目标坐标的一个力,活动范围一点点增大,最后逼近目标点 //只对Flash, InFlash, OutFlash, InOutFlash这四种曲线有用,其他的曲线起作用的就只有Ease枚举参数//2、AnimationCurve(Unity自定义曲线)//使用如 //transform.DOMove(Vector3.one * 2, 1).SetEase(animationCurve);

AnimationCurve(Unity自定义曲线)如
public AnimationCurve animationCurve;

Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

4、DOTween动画执行回调 代码及详细说明如
1、动画完成执行的回调 //transform.DOMove(Vector3.one, 2).OnComplete(() => //{ //Debug.Log("动画完成执行的回调"); //}); 2、动画释放时执行的回调 //transform.DOMove(Vector3.one, 2).OnKill(() => //{ //Debug.Log("动画释放时执行的回调"); //}); 3、播放执行时执行的回调 //transform.DOMove(Vector3.one, 3).OnPlay(() => //{ //Debug.Log("播放执行时执行的回调"); //}); 4、动画暂停时执行的回调 //transform.DOMove(Vector3.one, 2).OnPause(() => //{ //Debug.Log("动画暂停时执行的回调"); //}); 5、循环周期完成时执行的回调 //transform.DOMove(Vector3.one, 2).OnStepComplete(() => //{ //Debug.Log("循环执行动画时执行的回调"); //}); 6、只在第一次播放动画时调用,在Play之前调用 //transform.DOMove(Vector3.one, 2).OnStart(() => //{ //Debug.Log("只在第一次播放动画时调用,在Play之前调用"); //}); 7、播放动画时执行的回调 //transform.DOMove(Vector3.one, 2).OnUpdate(() => //{ //Debug.Log("播放动画时执行的回调"); //}); 8、动画重新播放时执行 //transform.DOMove(Vector3.one, 2).OnRewind(() => //{ //Debug.Log("动画重新播放时执行"); //}); 9、动画重新播放时执行 //transform.DOMove(Vector3.one, 2).OnRewind(() => //{ //Debug.Log("动画重新播放时执行"); //});

效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

5、DOTween 类方法使用 代码及详细说明如
//★类方法 //1、返回所有暂停的动画,没有则返回null //DOTween.PausedTweens(); //2、返回所有播放的动画,没有则返回null //OTween.PlayingTweens(); //3、获取给定ID的数组 //DOTween.TweensById("id", true); //返回满足条件的动画数组 //参数1:是动画的ID //参数2:true正在播放的动画//4、返回给定对象的数组 //DOTween.TweensByTarget(transform, true); //返回满足条件的动画数组 //参数1:是播放动画的对象 //参数2:true正在播放的动画//5、判断动画是否在播放 // DOTween.IsTweening(transform); //参数1: 为true时,给定对象在播放状态时 返回true //参数2: 为false时,是否有动画内容//6、统计正在播放的动画,延迟也算 //DOTween.TotalPlayingTweens();

效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

6、DOTween 动画进度状态的判断 代码及详细说明如
var tweener = transform.DOMove(Vector3.one, 2); 1、表示动画执行时间的属性,可读可写 //tweener.fullPosition = 1; 2、动画执行多少次 //tweener.CompletedLoops(); 3、获取动画的延迟时间 //tweener.Delay(); 4、获取动画的持续时间 参数为 true 表示计算循环的时间,无限循环为Infinity //tweener.Duration(false); 5、动画已播放的时间 参数为true 表示计算循环的时间 //tweener.Elapsed(false); 6、返回动画进度的百分比 当yoyo循环模式下,会来回执行(计算整体时间的百分比) //tweener.ElapsedDirectionalPercentage(); 7、返回动画区间已用的百分比 单次循环的数值为0到1 //tweener.ElapsedPercentage(true); 8、动画是否是播放状态 //bool play=tweener.IsActive(); //if (play) //Debug.Log("动画处于播放状态"); 9、是否处于反向 //tweener.IsBackwards(); 10、动画是否完成 //tweener.IsComplete(); 11、是否以初始化 //tweener.IsInitialized(); 12、是否正在播放 //tweener.IsPlaying(); 13、返回循环次数 //tweener.Loops();

效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

7、DOTween携程 代码及详细说明如
Tween tween; private void Awake() { tween = transform.DOMove(Vector3.one, 2).SetLoops(3); //开启携程 StartCoroutine(waitFunc()); }private IEnumerator waitFunc() { //1、等待动画执行完 yield return tween.WaitForCompletion(); Debug.Log("等待动画执行完"); //2、等待指定的循环次数(如循环3此,这里指定2次那么执行两次后这里执行) yield return tween.WaitForElapsedLoops(2); //注意超过次数会继续执行 Debug.Log("等待指定的循环次数"); //3、动画执行完毕执行 yield return tween.WaitForKill(); Debug.Log("动画执行完毕执行"); //4、等待动画执行指定时间(时间位置) yield return tween.WaitForPosition(1.5f); Debug.Log("动画已过了1.5秒"); yield return tween.WaitForRewind(); Debug.Log("重新执行函数"); yield return tween.WaitForStart(); Debug.Log("等待Start执行后继续执行"); }

效果如

8、DOTween路径动画 代码及详细说明如
using System.Linq; public Transform[] listTransform; private void Awake() { //拿到listTransform里面的所有Position转成一个数组 var listPos =listTransform.Select(positionPos => positionPos.position).ToArray(); //使用DOpath路劲 //动画路径参数说明如: //参数1是提供路径上点的坐标,需要按顺序添加进数组 //参数2路径动画的整体持续时间 //参数3线的类型 : 直线(Linear)、曲线(CatmullRom)…… //参数4路径模式(四种类型) :如 //Ignore:3d场景下忽略参数和设置的LookAt参数 //Full3D:3d场景下看向任何方向 //TopDown2D:3d场景下只能上下旋转,看向物体 //Sidescroller2D:3d场景下只能左右旋转看向物体 //参数5路径分辨率,代表路径点之间的曲线由多少个点构成,也就是点越多,曲线就越圆 //参数6设置路径的颜色和 transform.DOPath(listPos,10, PathType.CatmullRom,PathMode.Full3D,10,Color.red); }

效果如
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

最后 Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

本文到这里就结束了,大佬们的支持是我持续更新的最大动力,希望这篇文章能帮到大家
相关专栏连接
Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

下篇文章再见ヾ( ̄▽ ̄)ByeBye
【Unity相关插件|猿创征文| Unity~DOTween相关使用】Unity相关插件|猿创征文| Unity~DOTween相关使用
文章图片

    推荐阅读