使用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還有許多特別棒的效果,在此處就不多做介紹了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章