猿创征文| Unity~DOTween相关使用
Posted SYFStrive
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了猿创征文| Unity~DOTween相关使用相关的知识,希望对你有一定的参考价值。
@作者 : SYFStrive
@博客首页 : HomePage
📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗
📌:觉得文章不错可以点点关注 👉:专栏连接🔗
💃:程序员每天坚持锻炼💪
🔗:直接阅读文章
👉 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);
移动效果如 👇(旋转缩放类似)
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
效果如 👇
3、Shake 扩展方法
代码及详细说明如 👇
#region Shake
//参数:持续时间,震动强度,震动频次,随机角度,淡出
// 震动:强度
// 震动:震动次数
// 随机性:随机角度
// 淡出:就是运动最后是否缓慢移动回到原本位置
//移动旋转缩放都是类似的
//transform.DOShakePosition(2, 0.5f, 60, 90);
//transform.DOShakeRotation(3);
//transform.DOShakeScale(3);
#endregion
效果如 👇
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);
① 允许多个同时执行 如下:
② 它是增量动画
③ 效果如下:
Ⅱ 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);
① 效果如 👇
② 效果如 👇
③ 效果如 👇
④ 效果如 👇
⑤ 效果如 👇
⑥ 效果如 👇
⑦ 效果如 👇
Ⅲ 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);
① 效果如 👇
③ 效果如 👇
④ 效果如(视域大小) 👇
透视如下(视域大小) 👇
正交如下:
⑤ 效果如 👇(多个相机操作)
⑥ 效果如 👇(四倍快乐)
⑦ 效果如 👇
Ⅳ Text 扩展方法
#region Text扩展方法
//获取相关文本
TextAsset textAsset = Resources.Load<TextAsset>("坚持锻炼");
//如之前的方法 (类似)
//text.DOColor(Color.black, 2);
//text.DOFade(0, 2);
//text.DOBlendableColor(Color.black, 2);
//……
//★ 对话的神插件 (需要读取的内容,多少秒读完)
text.DOText(textAsset.ToString(), 20);
#endregion
效果如 👇
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); //预添加
// 执行顺序是 PrependInterval 👉 Prepend 👉 Append (后进先出)
// 回调函数
// 1、预添加回调 👉 预加载
quence.PrependCallback(PreCallBack);
// 2、在规定的时间点加入回调 👉 第几秒插入回调
quence.InsertCallback(5, InsertCallBack);
// 3、添加回调
quence.AppendCallback(CallBack);
效果如 👇
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效果如 👇
② 玩法2效果如 👇
……
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;
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("动画重新播放时执行");
//);
效果如 👇
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();
效果如 👇
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();
效果如 👇
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);
效果如 👇
最后
本文到这里就结束了,大佬们的支持是我持续更新的最大动力,希望这篇文章能帮到大家💪
下篇文章再见ヾ( ̄▽ ̄)ByeBye
以上是关于猿创征文| Unity~DOTween相关使用的主要内容,如果未能解决你的问题,请参考以下文章
猿创征文| Unity使用新输入系统InputSystem制作飞机大战Demo