使用DoTween在Unity中制作队列(Sequence)动画

DoTween 是Unity上的一款动画插件,它使用简单,功能强大,利用它可以很方便地制作一些简单动画。而即使是一些较为复杂的队列动画,对它来说也不在话下。

开始使用

首先,访问AssetStore,搜索DoTween,下载该插件的免费版即可。

DoTween插件

下载完成后,在Unity菜单栏中点击Tools->Demigiant->DOTween Utility Panel ,在他弹出的窗口点击Setup DOTween,此时DOTween会根据你的Unity版本自动引入所需要的库与文件。

DoTweenSteup

单个Tween动画

DoTween扩展了一些组件的方法,例如Rigidbody,Transform等,其中最常用的是Transform扩展。
在这里可以先尝试一下DoTween的扩展方法,下面这行代码的目的是使方块在1秒内于本地坐标轴x轴上移动两个单位,效果如下图所示。

CubeTransform.DoLocalMoveX(2.0f,1.0f);

DoTween插件

DoTween提供了非常多的动画方法,例如各种线性或非线性的移动、旋转,甚至颜色改变、淡入淡出、显示隐藏等等,在此不做演示。

队列动画(多个Tween动画)

在实际的需求中,一个动画一般都包含对多个物体的操作,那么如何使用DoTween制作这种动画呢?对于一些简单的动画,直接顺序执行多个DoTween语句即可;对于一些复杂的动画,诸如包含延时、动画事件回调、播放音效等的动画,可以利用DoTween的动画队列完成这些操作。如果你有Cosos等2d引擎的使用经验,那么Sequence你一定不会陌生。

Append

队列加入动画,使用Append方法。Append加入的Tween是顺序播放的,即动画1播放完成后,再播放动画2。

//首先定义一个队列
var s = DOTween,Sequence();
//追加Tween动画,使用动画队列的Append方法。
s.Append(Cube1Trans.DoLocalMoveX(2.0f,1.0f));
//先加入的Cube1动画播放完毕后,播放Cube2动画
s.Append(Cube2Trans.DoLocalMoveY(2.0f,1.0f));
//另一种写法
/*
s.Append(
Cube1Trans.DoLocalMoveX(2.0f,1.0f)
).Append(
Cube2Trans.DoLocalMoveY(2.0f,1.0f)
)
*/

上面两代码创建了一个动画队列,并为该队列添加了两个Tween动画,后添加的Cube2动画会在Cube1动画播放完毕后播放,如下图所示。

DoTween插件

Insert

对于需要并行播放的动画,可以使用Insert方法。Insert方法第一个参数为动画延时播放的时间,第二个参数为要播放的Tween动画,代码及效果如下所示。

var s = DOTween.Sequence();
var Cube1RunTime = 1.0f;
var Cube2RunTime = 1.0f;
s.Append(this.m_Trans.DOLocalMoveX(2.0f, Cube1RunTime));
s.Append(this.m_Trans.DOLocalMoveX(-3.42f, Cube1RunTime));
//在队列动画开始后的Cube1RunTime秒后播放
s.Insert(Cube1RunTime, this.m_Other.DOLocalMoveY(2.5f, Cube2RunTime));

DoTween插件

请注意,无论队列之前Append了多少Tween动画,InsertTween动画开始播放的时刻都是队列的开始时刻+延时时间,它与你Append插入的动画无关。

DoTween插件

InsertCallback

对于动画事件回调的需求,使用InsertCallback实现,其第一个参数代表回调的延时时间,第二个参数可以是一个lambda表达式,我在这里处理一些事件,例如播放效果音频等。

var s = DOTween.Sequence();
var Cube1RunTime = 1.0f;
var Cube2RunTime = 1.0f;
s.Append(this.m_Trans.DOLocalMoveX(2.0f, Cube1RunTime));
s.Append(this.m_Trans.DOLocalMoveX(-3.42f, Cube1RunTime));
s.Insert(Cube1RunTime, this.m_Other.DOLocalMoveY(2.5f, Cube2RunTime));
//回调
s.InsertCallback(Cube1RunTime, () =>
{
      Debug.Log("Cu假装播放Cube2的移动音频");
});
s.Append(this.m_Trans.DOLocalMoveY(2.5f, Cube1RunTime));
var s = DOTween.Sequence();

效果如下图所示。

DoTween插件

好了,合理利用上面介绍的队列方法,完成一个稍微复杂的动画效果应该不是难事。而DoTween还有许多特别棒的效果,在此处就不多做介绍了。

引用资料

1、[头图]【Unity】Unity-Japan UnityChanSD角色

梓喵出没博客(azimiao.com)版权所有,转载请注明链接:https://www.azimiao.com/3835.html
欢迎加入梓喵出没博客交流群:313732000

吐槽 mikusa

*

*

0位绅士参与评论

  1. mikusa06-10 17:35 回复

    哇哦,金色大佬

  2. ph05-17 17:22 回复

    很感谢时间轴的说明。