DoTween插件的基本操作总结

Posted Tandre_Z

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DoTween插件的基本操作总结相关的知识,希望对你有一定的参考价值。

目录

插件说明

DoTween是unity资源商店下一个做补间动画的常用插件,可以在资源商店中直接下载导入,通过unity工具栏的Tools/Demigiant/DoTween Utility Panel打开面板进行开启,并在代码中引用DG.Tweening的命名空间即可使用它的接口。
DoTween分专业版和免费版,以下仅针对免费版的操作进行总结。

接口使用

Dotween包括Tweener(补间,控制值并为其生成动画)、Sequnece(序列,控制多个补间作为组来处理)、Tween(通用词表示补间和序列)、NestedTween(嵌套补间,序列中包含的补间)四种命名法。

以及DO、Set、On的三种笼统上分别表示补间效果、参数设置、回调的前缀。

下面将从三种命名法分开来通过对每个接口的使用案例来对其进行说明,也方便接口的查阅

DO方法

Tweener

物体移动、旋转、缩放
transform.DOMove(Vector3.one, 2);//2秒移动到(1,1,1)位置
transform.DOMoveX(3f,2);//x移动到3.0位置
transform.DOLocalMove(Vector3.one, 2);//按自身坐标系移动到目标位置
transform.DORotate(Vector3.one*30, 2);//2秒旋转到(30,30,30)的角度
transform.DOScale(Vector3.one*20,2);//将物体的Scale2秒缩放到(20,20,20)
动画混合运算
//2秒移动到(1,1,1),即将移动到(4,4,4)和移动到(-3,-3,-3)进行了混合
transform.DOBlendableMoveBy(Vector3.one * 4, 2f);
transform.DOBlendableMoveBy(Vector3.one * (-3), 2f);
物体颤动及震动
transform.DOPunchPosition(new Vector3(3, 3, 3), 2, 3, 0.1f);//以颤动系数为0.1在2秒内经过三次颤动到达(3,3,3)位置
transform.DOShakePosition(3f, 1, 10, 90);//在3秒的时间内以强度为1、随机角度为90度震动10次
材质动画控制

颜色与透明度

Material mat = GetComponent<MeshRenderer>().material;
mat.DOColor(Color.red, "MainColor", 2);//将材质shader中属性MainColor在2秒内变为红色
mat.DOColor(Color.clear, "MainColor", 2);//将材质shader中属性MainColor在2秒内变透明
mat.DOFade(0, "MainColor", 2);//将材质shader中代表颜色的属性MainColor在2秒内将透明度变为0
mat.DOVector(Color.clear, "MainColor", 2);//将材质shader中属性MainColor在2秒内变透明

渐变

Gradient gradient;
mat.DOGradientColor(gradient ,"MainColor", 2);//2秒将材质的shader中属性MainColor变为预设渐变gradient

偏移值

mat.DOOffset(new Vector2(1, 1), 2);//2秒将材质的shader中偏移值变为(1,1)

动画混合

//混合,将材质shader中属性MainColor在2秒内变为黄色
mat.DOBlendableColor(Color.red, "MainColor", 2);
mat.DOBlendableColor(Color.green, "MainColor", 2);
相机动画控制
Camera cam = Camera.main;
//宽高比
cam.DOAspect(16 / 9,2);//2秒时间将相机宽高比变为16:9
//颜色
cam.DOColor(Color.red, 2);//2秒时间将相机颜色变到红色,对应相机的Background属性
//远近截面
cam.DONearClipPlane(1f, 2);//2秒时间将相机近截面变到1,对应相机的clipping Plane Near的属性
cam.DOFarClipPlane(10f, 2);//2秒时间将相机远截面变到10,对应相机的clipping Plane Near的属性
//相机视域
cam.DOFieldOfView(100, 2);//2秒时间将透视相机的FieldOfView属性变为100
cam.DOOrthoSize(10, 2);//2秒时间将正交相机的Size属性变为100
//分屏
cam.DORect(new Rect(0, 0, 0.5f, 0.5f), 2);//2秒时间将相机的Viewport Rect属性变为(0,0,0.5f,0.5f)
cam.DOPixelRect(new Rect(0, 0, 960, 540), 3f);//2秒时间将相机根据像素设置Viewport Rect属性为(0,0,960/相机的宽,540/相机的高)
//相机震动
cam.DOShakePosition(3f, 1, 10, 90);//在3秒时间内相机以强度为1、随机角度为90度震动10次
文本框打字机效果
public Text text;
text.DOText("这是一个字符串", 5);//5秒时间以打字机形式在text上显示字符串

Sequence

append

Sequence sequence = DOTween.Sequence();
sequence.Append(transform.DOMove(Vector3.one, 3));//物体先3秒移动到(1,1,1)
sequence.AppendInterval(1);//然后在(1,1,1)停止运动1秒
sequence.Append(transform.DOMove(-Vector3.one , 2));//接着2秒时间运动到(-1,-1,-1)

Insert

//最终效果:
//0s-2s移动到(-1,-1,-1)并缩放到(2,2,2)
//2s-3s从(2/3,2/3,2/3)移动到(1,1,1)
//tip:中间(1,1,1)到(2/3,2/3,2/3)会直接跳过去,总时长不变;
//然后3s-4s不动,4-6移动到(3,3,3)
sequence.Append(transform.DOMove(Vector3.one, 3));//物体3秒移动到(1,1,1)
sequence.Insert(0, transform.DOMove(-Vector3.one, 2));//覆盖掉0到2秒的时间执行物体移动到(-1,-1,-1)的动画
sequence.Insert(0, transform.DOScale(Vector3.one*2, 2));//0到2秒的时间执行物体缩放到(2,2,2)的动画
sequence.Insert(4, transform.DOMove(Vector3.one * (3), 2));

Join

//效果:0-3s移动到(1,1,1)位置的同时缩放到(2,2,2)
sequence.Append(transform.DOMove(Vector3.one, 3));
sequence.Join(transform.DOScale(Vector3.one * 2,3));

Prepend

//0s-2s移动到(-1,-1,-1)然后2s-5s移动到(1,1,1);
sequence.Append(transform.DOMove(Vector3.one, 3));
sequence.Prepend(transform.DOMove(-Vector3.one, 2));

路径动画

基本使用

public Transform[] listTrans;
var listPos = listTrans.Select(u => u.position).ToArray();
transform.DOPath(listPos,5,PathType.CatmullRom,PathMode.Full3D,10,Color.red);//沿listPos的路径以曲线、完全3d空间下、每段分1-个点的形式5s执行完动画,编辑器下路径的颜色为红色

常用参数设置:

transform.DOPath(listPos, 5).SetOptions(true, AxisConstraint.X, AxisConstraint.None);沿listPos的路径锁定x轴的位置变化,不锁定旋转5s执行完路径动画
transform.DOPath(listPos, 5).SetLookAt(0f);//参数范围为0-1,表示与正前方偏移的角度

Set方法

参数设置方式

直接在末尾以"."连接的方式设置相应参数

//参数设置
transform.DOMove(Vector3.one, 1).SetLoops(3, LoopType.Yoyo);//以Yoyo的方式循环执行三次1秒移动到(1,1,1)的动画,LoopType.Yoyo为来回循环,LoopType.Restart为每次执行完毕后会返回原点,Incremental为递增,会朝着目标方向不返回的前进指定次数。第一个参数次数为-1时则为无线循环

定义TweenParams实例,多用于多动画统一设置

TweenParams tweenParams = new TweenParams();
tweenParams.SetLoops(-1, LoopType.Yoyo);
transform.DOMove(Vector3.one,1).SetAs(tweenParams);

Dotween的类方法

var list = DOTween.PausedTweens();//所有暂停的动画
list = DOTween.PlayingTweens();//所有正在播放的动画
DOTween.TweensById("id", true);//找到id为"id"并正在播放的动画
DOTween.TweensByTarget(transform,true);//找到tranforn上正在播放的动画
DOTween.IsTweening(transform);//判断动画是否在运行
DOTween.TotalPlayingTweens();//正在播放的动画数量(包含正处于延迟中的动画)

Tween tween= transform.DOMove(Vector3.one, 4).SetLoops(4);
Debug.Log(tween.fullPosition);//获取动画的位置
tween.fullPosition = 2;//设置动画的位置
Debug.Log(tween.CompletedLoops());//获取动画已经完成的循环次数,从0开始
Debug.Log(tween.Duration(false));//获取动画不包含循环的时长
Debug.Log(tween.Elapsed(false));//获取动画不包含循环已经执行完成的时间
Debug.Log(tween.ElapsedPercentage(false));//获取动画不包含循环已经执行完成的时间的百分比
Debug.Log(tween.IsActive());//获取动画是否为活动状态

动画的基本参数设置

transform.DOMove(Vector3.one, 1).SetAutoKill(false);//动画不会自动销毁
transform.DOMove(Vector3.one,1).From(true);//为true时从物体位置加上向量(1,1,1)的位置移动到原物体位置,为空或为false时为从(1,1,1)位置移动到原位置

transform.DOMove(Vector3.one, 1).SetDelay(2);//延迟2秒执行动画
transform.DOMove(Vector3.one, 4).SetSpeedBased(true);//true或不写参数时为以4个单位的速度移动到(1,1,1)false时为以4秒时间移动到目标位置

transform.DOMove(Vector3.one, 4).SetId("001");
DOTween.Play("001");

transform.DOMove(Vector3.one, 4).SetRecyclable(true);//设置为可回收对象,dotween本身会自动回收
transform.DOMove(Vector3.one, 3).SetRelative();//向着在原位置基础上增加(1,1,1)的位置移动

transform.DOMove(Vector3.one, 3).SetUpdate(UpdateType.Normal, true);//动画会受Time.timeScale控制

动画曲线

调用dotween预设动画曲线来进行直接设置

transform.DOMove(Vector3.one, 3).SetEase(Ease.Linear);//匀速运动到(1,1,1)

使用unity动画曲线组件自定义动画曲线的方式进行设置

public AnimationCurve  animationCurve;
transform.DOMove(Vector3.one, 4).SetEase(animationCurve);//以自定义曲线设置动画曲线

自定义函数设置动画曲线:

transform.DOMove(Vector3.one, 4).SetEase((float time,float duration, float overshootOrAmplitude, float period) =>
    return time / duration;//匀速的案例-》当前时间/总时间
);

动画的基本操作方法

transform.DOMove(Vector3.one, 4);
transform.DORestart();//动画重新播放
transform.DORewind();//动画重新回到开始位置
transform.DOSmoothRewind();//动画平滑的回到开始位置
transform.DOPlay();//播放动画
transform.DOPause();//暂停动画
transform.DOFlip();//动画反转
transform.DOGoto(1, true);//跳到第一秒位置并播放
transform.DOPlayForward();transform.DOPlayBackwards();//播放/倒放
transform.DOTogglePause();//每次调用会在播放和暂停中切换

On

常用的回调方法

transform.DOMove(Vector3.one, 4).OnComplete(() =>  Debug.Log("动画播放完成"); );
transform.DOMove(Vector3.one, 4).OnStart(() =>  Debug.Log("动画开始播放"); );
transform.DOMove(Vector3.one, 4).OnPause(() =>  Debug.Log("动画暂停播放"); );
transform.DOMove(Vector3.one, 4).OnRewind(() =>  Debug.Log("动画重新播放"); );

Sequence中的回调函数

sequence.InsertCallback(2, () => Debug.Log("在2秒处插入了回调"); );
sequence.PrependCallback(() => Debug.Log("在序列开始添加了回调"); );
sequence.AppendCallback(() =>  Debug.Log("在序列末尾添加了回调"); );

协程中的常用方法

Tween tween = transform.DOMove(Vector3.one, 4).SetLoops(4);
StartCoroutine("Func");
IEnumerator Func()

    yield return tween.WaitForCompletion();//等待动画执行完毕后
    yield return tween.WaitForElapsedLoops(3);//等待动画执行完3次循环之后
    yield return tween.WaitForKill();//等待动画销毁
    yield return tween.WaitForPosition(2);//等待动画执行到2秒位置
    yield return tween.WaitForRewind();//等待动画重新开始
    yield return tween.WaitForStart();//等待动画开始

Unity3D 一些工具总结

插件

EasyTouch插件

Unity3D DoTween 简明快速使用教程

DoTween 默认配置加上链式调用API风格,配上lambda匿名函数调用,非常简单清晰好用。DoTween实现了通用的缓动算法,能够配置出各种想要的动画效果。另外,队列延迟回调函数,也能完成各种异步延迟执行功能。


DoTween 为各种Unity的对象做了函数绑定,方便调用。比如Transform, Color, Text, Material等都可以直接调用DoTween的动画API。我们先从通用的动画函数来了解。
 

Cinemachine Brain

实现电影级别的分镜,推拉式镜头等,需要2017以上的版本才能使用,配合TimeLine一起使用,和Animator一起,那个是用的非常多,而且适用范围也非常广,很多做视频的也用,游戏也用,剧情动画基本必备,然后原神的人物镜头相机,说是也是用的那个

 

unity 运行时查看日志调试的神器 SRDebugger

SRDebugger

  • 在运行真机的时候,查看日志,FPS,游戏性能,系统信息,可以方便的开启,关闭。
  • 响应式设计支持任何分辨率或方向
  • 可以支持Andorid、IOS、Window、WebGL 和Web Player
  • 不怎么耗费性能,只需要很小的开销

Unity插件Gaia

Unity精美场景地形
unity原生也可以搭
然后很多2D的是用tilemap
tilemap工具就很丰富了
 

动画

1.在Unity引擎中制作动画,ui在用

2.从外部工具(如3ds Max、Maya等)导入动画,模型在用

3.使用代码制作的动画  dotween在用

4.uv动画 ,shader直接处理,少量的 ta做的动画,性能高,消耗gpu去处理

入门计划

UGUI

UNITY3D 的物理研究

DOTween 插件练习

protobuf

热更新和assetbundle学习

人物换装系统

剧情动画和timeline研究

基本动画,gameobject生命周期,资源加载卸载,ugui,这些会了,单机基本过关了,网络搞个protobuf,剩下的你后段那么久,网络就没啥了,再后面就是深入研究了,ecs什么的完全没必要啊,游戏多少年面向对象了,性能上比ecs是差一点,做个大型的mmo都没问题,所以会不会ecs有什么问题,思想了解一下就好了,等你入门了再去了解ecs也不迟的,一般游戏的话
先搞个单机,打飞机(休闲游戏)
再搞个带界面的,ugui了解一下
然后mmo搞起来(大型游戏)
后面就随意了,一个mmo搞起来,大部分游都能搞了,

音频, 一般用 FMod , 我们现在用的 Wwise
先用 Unity的...
我肯定推荐 Fmod ,小公司, 个人开发者, 要嘛Unity 原生, 要嘛 Fmod
Wwise挺贵的
因为有可能存在3D的音频, 就你离的远. 这个声音要变小, 离得近, 声音要变大
那么就需要每个上面 一个 AudioSource
AudioSource 相当于音响, 这个音响是可以有距离的
当然你这上面全部都是2D 音效, 所以无所谓
顺便说下, Audio Listenr 就是你的耳朵
一般只有 一个耳朵用来听, 如果是MMO的话, 这个耳朵大部分在 相机上
3D的声音大小, 就取决于 AudioSource 跟  Audio Listenr 之间的距离

 

C#中的代码,有三种,

1.99%的代码只会影响到runtime

2.有些代码,会影响到editor

3.还有些代码,会影响到editor和runtime

Unity Navigation system自动寻路AI

Unity3D学习之路

以上是关于DoTween插件的基本操作总结的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D 一些工具总结

Unity3D 一些工具总结

[Unity3D] DOTween和Curvy插件,以及UI-Extension

unity dotween插件怎么沿着几个路径点移动

Unity 动画插件 DOTween 的简单使用

Unity常用动画插件DOTween快速上手