- DOTween插件的引入:Asset Store->DoTween(选择free版导入即可)。
DOTween是Unity上的一款动画插件,它使用简单,功能强大,利用它可以很方便地制作一些简单动画。而即使是一些较为复杂的队列动画,对它来说也不在话下。下面我们来介绍一下DOTween插件中一些常用的方法。
1.让一个数值渐变到目标值 - DOTween.To(…)方法
DOTween.To(() => mypoint,x => mypoint = x,new Vector3(10,10,10),2);
参数说明:
1.()=>mypoint表示返回值为myvalue,即对myvalue进行更改
2.x => mypoint = x表示将系统计算好的x值(当前值到目标值的插值)附给myvalue.
(关于这两点,大家有疑惑的话可以了解或重新熟悉一下lambda表达式)
3.目标位置
4.渐变时间
2.控制物体移动,旋转和缩放的方法 - transform.DoMove(…),-transform.DORotate(…)和-transform.DOScale(…)方法
transform.DOMove(new Vector3(1, 1, 1), 2);
参数:
1.移动的目标位置
2.运动到目标位置所需的时间
transform.DORotate(new Vector3(0, 0, 90), 1);
参数:
1.旋转目标值
2.完成旋转所需的时间
transform.DOScale(Vector3.one * 2, 2);
参数:
1.缩放目标值
2.完成缩放所需的时间
相应的,还有一些在某个坐标轴上移动和旋转的方法,下面仅给出相应的方法,参数的理解与上面类似。
//移动
transform.DOMoveX(5f, 2f);//x轴运动的目标值,运动时间
transform.DOMoveY(5f, 2f);
transform.DOMoveZ(5f, 2f);
//旋转
transform.DORotateQuaternion(new Quaternion(0.1f,0.1f,0.1f,0.1f),2);//四元数旋转
关于为什么要使用四元数旋转而不直接用简单明了的欧拉旋转大家可以参考以下链接下的博客:
3.材质动画
—利用材质改变颜色动画
Material material = GetComponent<MeshRenderer>().material;
//改变材质的主颜色(当前材质的shader颜色名称是主颜色的话,参数二可省去)
material.DOColor(Color.red,"_Color", 2);
//改变材质对应的颜色
material.DOColor(Color.red, "该材质shader所对应的颜色名称", 2);
—材质透明度动画(与改变颜色类似)
Material material = GetComponent<MeshRenderer>().material;
//透明度变为0,时间为2s
material.DOFade(0, 2);
material.DOFade(0, "该材质shader所对应的颜色名称", 2);
—自定义材质颜色渐变动画
Gradient是unity的渐变编辑器(下面有渐变编辑器的图)
material.DOGradientColor(Gradient, "_Color", 3);
—材质颜色混合变化
我们可以用DOColor(…)来改变材质颜色的变化,但是这种改变是单一变化,后一次变化会覆盖前一次变化,无法达到混合变化的效果,所以混合变化我们应该用DOBlendableColor(…)。
material.DOBlendableColor(Color.red, 5);
material.DOBlendableColor(Color.white, 5);
以上颜色最终将变为红白混合色。
4.队列
—Append和Insert
Sequence quence = DOTween.Sequence();//首先定义一个队列
quence.Append(transform.DOMove(Vector3.one, 2));//添加动画入队列
quence.AppendInterval(1); //延时1s
quence.Append(transform.DOMove(new Vector3(3, 3, 3), 2));//添加动画入队列
quence.Insert(0, transform.DOMove(-Vector3.one, 2));//将动画插入到0s的位置
在此处应该注意Append和Insert并不存在依附的时间关系,也就是说,无论队列之前Append了多少动画,InsertTween动画开始播放的时间都是队列开始的时间+延时时间,它与Append插入的动画无关,它们是并行的。
—InsertCallBack
对于动画事件回调的需求,使用InsertCallBack实现,参数一代表回调的延时时间,第二个参数可以是lambda表达式,方法名,例如:
1.quence.InsertCallback(2f, () => { Debug.Log("insertcallback function are being used"); });//按时间回调
2.quece.InsertCallback(2f,InsertCallBack);
private void InsertCallBack(){
Debug.Log("***********");
}
5.运动曲线
—设置Ease曲线
DoTween中动画的渐变速度是曲线形式的(快->慢),我们可以通过设置Ease曲线来达到我们想要的速度效果,举个例子:
transform.DOMove(new Vector3(2,2,2),3).SetEase(Ease.Linear);
这里Linear曲线表示匀速运动,当然这只是一种曲线,大家可以通过设置不同的曲线来达到自己想要的动画效果。
—关于Falsh曲线
transform.DOMove(new Vector3(1,1,1),2).SetEase(Ease.Flash,3,0);
参数1:Flash的一个重载
2.振幅(也可以理解为震动次数,来回算两次)
3.相当于一个力的大小(范围:-1~1)。0代表运动幅度不变的运动,大于0运动幅度会慢慢较小,小于0则会变大。
6.路径动画
(记得引入system.Linq)
public Transform[] PointList;
void Start()
{
var positions = PointList.Select(u => u.position).ToArray();
transform.DOPath(positions, 5, PathType.CatmullRom, PathMode.Full3D, 50, Color.red);
}
参数:
1.位置
2.延迟时间
3.路径类型(直线/曲线)
4.表示是在3D空间的一个朝向
5.路径精度(数值越大,精度则越高)
6.路径颜色
—SetOptions
transform.DOPath(positions,5,PathType.CatmullRom,PathMode.Full.3D,50,Color.blue).SetOptions(true,AxisConstraint.X,AxisConstraint.Y);
参数:
1.是否让路径首尾相连
2.锁定某个方向轴的旋转
3.锁定位置(朝向)
—SetLookAt
SetLookAt(new Vector3(0,0,0));//表示看向某个位置
SetLookAt(transform);//表示看向某个物体
SetLookAt(0~1);//表示物体运动是的朝向,0表示朝向与路径同一个方向,1表示朝向路径方向的反方向,随着0~1数值的增大,运动方向也会朝着路径方向的逆时针旋转。
当然,DOTween插件功能绝不仅仅只有这些,还有很多强大的功能,今天我们就介绍到这里啦,感谢各位的阅读!