DOTween的基本用法
首先宣告一點,不要簡單的認為 DOTween 只能用在 Transform 元件上完成一些簡單的動畫,或者是完成一些 UI 動畫,DOTween 的用途是很廣的,unity中有很多元件都可以使用 DOTween 外掛完成動畫,大家可以去 DOTween 的官網看一下http://dotween.demigiant.com/documentation.php。看完之後,你會有一種相見恨晚的感覺。
下面介紹一下常用的API,並以 Transform 元件寫個小例子:
常用的函式都是以DO開頭,大家可以自己看下文件。
元件例項.DOPlay():播放動畫
元件例項.DOPause():暫停動畫
元件例項.DOPlayForward():正放動畫
元件例項.DOPlayBackwards():倒放動畫,倒放不會迴圈
元件例項.DOKill():殺死動畫
提醒下大家,一定要用元件例項去呼叫上面這些方法,如果用 this 關鍵字去呼叫,不會有語法錯誤,但是不會有效果
tweener.SetLoops():設定迴圈次數。-1:無限迴圈
tweener.SetEase():設定緩動效果
生命週期:
tweener.OnStart():動畫開始時呼叫,不管迴圈多少次,只調用一次
tweener.OnUpdate():動畫播放時呼叫
tweener.OnPlay():動畫開始播放時呼叫
tweener.OnPause():動畫暫停時呼叫
tweener.OnKill():動畫完全結束時或者被殺死時呼叫
tweener.OnStepComplete():單次動畫結束時呼叫,因為我們設定了迴圈,這裡時指單次動畫結束
tweener.OnComplete():動畫完全結束時呼叫,在OnKill之前呼叫
tweener.OnWaypointChange():這個我還沒搞清楚到底什麼時候呼叫,知道的大佬告訴一聲,謝謝!
tweener.OnRewind():倒放結束時呼叫
Sequence佇列:就是將多個動畫放到一個佇列裡面,然後挨個挨個播放,並可以迴圈。
DOTween.Sequence():建立佇列。
sequence.Append(tweener):將動畫加入佇列。
sequence.Insert(1, tweener):插入一個並行的動畫到佇列的某個位置。
sequence.SetLoops(-1):設定佇列是否迴圈。-1:無限迴圈。
1 using UnityEngine; 2 using DG.Tweening; 3 4 public class Subject1Test : MonoBehaviour 5 { 6 #region --變數定義 7 private Tweener tweener; 8 private bool isPause = false; 9 #endregion 10 11 #region --系統函式 12 private void Start() 13 { 14 tweener = this.transform.DOMove(new Vector3(10, 0, 0), 5f); 15 tweener.SetLoops(-1);//設定迴圈次數。-1:無限迴圈 16 tweener.SetEase(Ease.OutBack);//設定緩動效果 17 tweener.OnStart(delegate { Debug.Log("OnStart"); });//動畫開始時呼叫,不管迴圈多少次,只調用一次 18 tweener.OnUpdate(delegate { Debug.Log("OnUpdate"); });//動畫播放時呼叫 19 tweener.OnPlay(delegate { Debug.Log("OnPlay"); });//動畫開始播放時呼叫 20 tweener.OnPause(delegate { Debug.Log("OnPause"); });//動畫暫停時呼叫 21 tweener.OnKill(delegate { Debug.Log("OnKill"); });//動畫完全結束時或者被殺死時呼叫 22 tweener.OnStepComplete(delegate { Debug.Log("OnStepComplete"); });//單次動畫結束時呼叫,因為我們設定了迴圈,這裡時指單次動畫結束 23 tweener.OnComplete(delegate { Debug.Log("OnComplete"); });//動畫完全結束時呼叫,在OnKill之前呼叫 24 tweener.OnWaypointChange(delegate { Debug.Log("OnWaypointChange"); }); 25 tweener.OnRewind(delegate { Debug.Log("OnRewind"); });//倒放結束時呼叫 26 } 27 private void Update() 28 { 29 ControlTweener(); 30 } 31 #endregion 32 33 #region --自定義函式 34 private void ControlTweener() 35 { 36 if (Input.GetKeyDown(KeyCode.Space)) 37 { 38 isPause = !isPause; 39 if (isPause) 40 { 41 this.transform.DOPause();//暫停動畫 42 } 43 else 44 { 45 this.transform.DOPlay();//播放動畫 46 } 47 } 48 if (Input.GetKeyDown(KeyCode.F)) 49 { 50 this.transform.DOPlayForward();//正放動畫 51 } 52 if (Input.GetKeyDown(KeyCode.B)) 53 { 54 this.transform.DOPlayBackwards();//倒放動畫 55 } 56 if (Input.GetKeyDown(KeyCode.K)) 57 { 58 this.transform.DOKill();//殺死動畫 59 } 60 } 61 #endregion 62 }