@作者 : SYFStrive
: Unity插件
: 想做出以下效果
: Unity插件相关专栏
文章图片
文章图片
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导入
文章图片
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("坚持锻炼");
//如之前的方法 (类似)
//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);
//预添加
//执行顺序是 PrependIntervalPrependAppend (后进先出)//回调函数// 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相关插件|猿创征文| Unity~DOTween相关使用】
文章图片
推荐阅读
- Unity3D|猿创征文|UnitySqlite持久化数据
- #|猿创征文| Unity之C#高级开发②
- unity|【Unity】在物体上方显示UI并实现倒计时功能
- unity|Unity UI跟随物体
- Unity学习笔记|Unity学习笔记--实现UI元素跟随3D物体
- 笔记|Unity 2021.3.6f1 Crack
- 你所需要了解的几种纹理压缩格式原理
- Unity|【Unity】Unity学习笔记目录整理
- unity|unity笔记