[Unity插件]DOTween基礎

 

官方文檔連接:http://dotween.demigiant.com/documentation.PHP#globalSettingsphp

普通版下載地址:http://dotween.demigiant.com/download.phphtml

pro版下載地址:http://pan.baidu.com/s/1dEzTQkL安全

(pro版提供DOTween Animation和DOTween Path這兩個組件,支持可視化編輯)dom

移動類型:http://robertpenner.com/easing/easing_demo.htmloop

 

DOTween真的比iTween好不少:post

1.編寫方面更加人性化動畫

2.效率高不少,其中有一點是由於iTween使用的是unity內置的SendMessagethis

DOTween通常的樣子是這樣滴:spa

using DG.Tweening;.net

transform.DOMoveX(45, 1).SetDelay(2).SetEase(Ease.OutQuad).OnComplete(MyCallback);

好了,正式開始!

 

一些名詞:

Tweener:補間動畫

Sequence:至關於一個Tweener的鏈表,能夠經過執行一個Sequence來執行一串Tweener

Tween:Tweener + Sequence

Nested tween:Sequence中的一個Tweener稱爲一個Nested tween

 

主要的方法(就是最經常使用的):

1.以DO開頭的方法:就是補間動畫的方法。例如:transform.DOMoveX(100,1)

2.以Set開頭的方法:設置補間動畫的一些屬性。例如:myTween.SetLoops(4, LoopType.Yoyo)

3.以On開頭的方法:補間動畫的回調方法。例如:myTween.OnStart(myStartFunction)

 

DOTween初始化與全局設置:

當你第一次建立一個Tween時,DOTween就會自動初始化(只初始化一次),使用缺省值。

固然,也可使用DOTween.Init方法進行自定義,但要在第一次建立一個Tween前。全部建立的Tween都會受DOTween.Init方法的影響。

但以後,你也能夠經過DOTween類的一些靜態方法或者變量來修改全局設置:

 

[csharp]  view plain  copy
 
  1. static LogBehaviour DOTween.logBehaviour  
  2. static bool DOTween.showUnityEditorReport  
  3. static float DOTween.timeScale  
  4. static bool DOTween.useSafeMode  
  5. static DOTween.SetTweensCapacity(int maxTweeners, int maxSequences)  
  6.   
  7.   
  8. static bool DOTween.defaultAutoKill  
  9. static AutoPlay DOTween.defaultAutoPlay  
  10. static float DOTween.defaultEaseOvershootOrAmplitude  
  11. static float DOTween.defaultEasePeriod  
  12. static Ease DOTween.defaultEaseType  
  13. static LoopType DOTween.defaultLoopType  
  14. static bool DOTween.defaultRecyclable  
  15. static bool DOTween.defaultTimeScaleIndependent  
  16. static UpdateType DOTween.defaultUpdateType  

 

static DOTween.Init(bool recycleAllByDefault = false, bool useSafeMode = true, LogBehaviour logBehaviour = LogBehaviour.ErrorsOnly)

recycleAllByDefault :若是爲true,則當Tween完成時就會被回收,放到一個池中;不然就會被destroy

useSafeMode :效率會稍微下降,但更安全

logBehaviour :默認值爲只打印錯誤信息

 

建立Tweener(有三種方法):

1.

 

[csharp]  view plain  copy
 
  1. static DOTween.To(getter, setter, to, float duration)  
  2. 以DOTween.To(() => myVector, x => myVector = x, new Vector3(3, 4, 8), 1);爲例,就是對myVector進行插值,目標值爲Vector3(3, 4, 8)  

 

2.

 

[csharp]  view plain  copy
 
  1. transform.DOMove(new Vector3(2,3,4), 1);  
  2. rigidbody.DOMove(new Vector3(2,3,4), 1);  
  3. material.DOColor(Color.green, 1);  

對於unity內置的一些組件,均可以經過".+DO開頭的方法"的方式建立補間動畫

 

以transform.DOMove(new Vector3(2,3,4), 1)爲例,new Vector3(2,3,4)是最終值,意思是用一秒的時間運動到Vector3(2,3,4)

而transform.DOMove(new Vector3(2, 3, 4), 1).From(),就是從Vector3(2,3,4)運動到當前位置

 

3.

 

[csharp]  view plain  copy
 
  1. static DOTween.Punch(getter, setter, Vector3 direction, float duration, int vibrato, float elasticity)  
  2. static DOTween.Shake(getter, setter, float duration, float/Vector3 strength, int vibrato, float randomness, bool ignoreZAxis)  
  3. static DOTween.ToAlpha(getter, setter, float to, float duration)  
  4. static DOTween.ToArray(getter, setter, float to, float duration)  
  5. static DOTween.ToAxis(getter, setter, float to, float duration, AxisConstraint axis)  
  6.   
  7. static DOTween.To(setter, float startValue, float endValue, float duration)  


 

建立Sequence:

Sequence能夠包含Sequence,當執行一個Sequence時會順序執行Tweener,可使用Insert方法實現同時執行。

Sequence的方法:

 

[csharp]  view plain  copy
 
  1. static DOTween.Sequence()  
  2.   
  3. Append(Tween tween)  
  4. AppendCallback(TweenCallback callback)  
  5. AppendInterval(float interval)  
  6. Insert(float atPosition, Tween tween)  
  7. InsertCallback(float atPosition, TweenCallback callback)  
  8. Join(Tween tween)  
  9. Prepend(Tween tween)  
  10. PrependCallback(TweenCallback callback)  
  11. PrependInterval(float interval)  


 

例子:

 

[csharp]  view plain  copy
 
  1. // Grab a free Sequence to use  
  2. Sequence mySequence = DOTween.Sequence();  
  3. // Add a movement tween at the beginning  
  4. mySequence.Append(transform.DOMoveX(1, 1));  
  5. // Add a rotation tween as soon as the previous one is finished  
  6. mySequence.Append(transform.DORotate(new Vector3(0, 180, 0), 1));  
  7. // Delay the whole Sequence by 1 second  
  8. mySequence.PrependInterval(1);  
  9. // Insert a scale tween for the whole duration of the Sequence  
  10. mySequence.Insert(0, transform.DOScale(new Vector3(3, 3, 3), mySequence.Duration()));  
等同於:

 

 

[csharp]  view plain  copy
 
  1. Sequence mySequence = DOTween.Sequence();  
  2. mySequence.Append(transform.DOMoveX(45, 1))  
  3.           .Append(transform.DORotate(new Vector3(0, 180, 0), 1))  
  4.           .PrependInterval(1)  
  5.           .Insert(0, transform.DOScale(new Vector3(3, 3, 3), mySequence.Duration()));  

 

上面咱們提到了全局設置,這裏咱們再說一說針對Tweener和Sequence的局部設置

 

[csharp]  view plain  copy
 
  1. float timeScale  
  2.   
  3. SetAs(Tween tween \ TweenParams tweenParams)  
  4. SetAutoKill(bool autoKillOnCompletion = true)  
  5. SetEase(Ease easeType \ AnimationCurve animCurve \ EaseFunction customEase)  
  6. SetId(object id)  
  7. SetLoops(int loops, LoopType loopType = LoopType.Restart)  
  8. SetRecyclable(bool recyclable)  
  9. SetUpdate(UpdateType updateType, bool isIndependentUpdate = false)  
  10. 注意的一點是SetUpdate方法可讓目標忽略timeScale  


 

回調方法:

 

[csharp]  view plain  copy
 
  1. OnComplete(TweenCallback callback)  
  2. OnKill(TweenCallback callback)  
  3. OnPlay(TweenCallback callback)  
  4. OnPause(TweenCallback callback)  
  5. OnRewind(TweenCallback callback)  
  6. OnStart(TweenCallback callback)  
  7. OnStepComplete(TweenCallback callback)  
  8. OnUpdate(TweenCallback callback)  
  9. OnWaypointChange(TweenCallback<int> callback)  


 

還有一些針對部分Tweener的特殊的局部設置:

注意SetOptions方法必須緊跟Tweener,就好像這樣:

DOTween.To(()=> myVector, x=> myVector = x, new Vector3(2,2,2), 1).SetOptions(AxisConstraint.Y, true);

 

TweenParams:

就是能夠將一些參數應用到多個Tweener中

 

[csharp]  view plain  copy
 
  1. // Store settings for an infinite looping tween with elastic ease  
  2. TweenParams tParms = new TweenParams().SetLoops(-1).SetEase(Ease.OutElastic);  
  3. // Apply them to a couple of tweens  
  4. transformA.DOMoveX(15, 1).SetAs(tParms);  
  5. transformB.DOMoveY(10, 1).SetAs(tParms);  

 

操做Tweener(有三種方法):

1.DOTween靜態方法

 

[csharp]  view plain  copy
 
  1. // Pauses all tweens  
  2. DOTween.PauseAll();  
  3. // Pauses all tweens that have "badoom" as an id  
  4. DOTween.Pause("badoom");  
  5. // Pauses all tweens that have someTransform as a target  
  6. DOTween.Pause(someTransform);  
2.Tweener方法

 

 

[csharp]  view plain  copy
 
  1. myTween.Pause();  
3.部件.+以DO開頭的方法

 

 

[csharp]  view plain  copy
 
  1. transform.DOPause();  

以上的是Pause方法,如下的是其他的操做方法。上面三種方式中,DOTween和Tweener都有如下的操做方法,而部件的話,要在前面加上"DO"。

 

 

[csharp]  view plain  copy
 
  1. CompleteAll/Complete()  
  2. FlipAll/Flip()  
  3. GotoAll/Goto(float to, bool andPlay = false)  
  4. KillAll/Kill(bool complete = true)  
  5. PauseAll/Pause()  
  6. PlayAll/Play()  
  7. PlayBackwardsAll/PlayBackwards()  
  8. PlayForwardAll/PlayForward()  
  9. RestartAll/Restart(bool includeDelay = true)  
  10. RewindAll/Rewind(bool includeDelay = true)  
  11. TogglePauseAll/TogglePause()  


 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

實例:

1.

 

[csharp]  view plain  copy
 
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using DG.Tweening;  
  4.   
  5. public class Test : MonoBehaviour {  
  6.   
  7.     public RectTransform rt;  
  8.     private bool isIn = false;  
  9.   
  10.     // Use this for initialization  
  11.     void Start ()   
  12.     {  
  13.         //修改的是世界座標  
  14.         //Tweener t = rt.DOMove(Vector3.zero, 0.3f);  
  15.         //修改的是局部座標  
  16.         Tweener t = rt.DOLocalMove(Vector3.zero, 0.3f);  
  17.         //默認動畫播放完成會自動銷燬  
  18.         t.SetAutoKill(false);  
  19.         t.Pause();  
  20.     }  
  21.       
  22.     public void OnClick ()   
  23.     {  
  24.         if (!isIn)  
  25.         {  
  26.             //將開始該物體的全部Tweener  
  27.             rt.DOPlayForward();  
  28.         }  
  29.         else  
  30.         {  
  31.             rt.DOPlayBackwards();  
  32.         }  
  33.         isIn = !isIn;  
  34.     }  
  35. }  


 

 

2.

 

[csharp]  view plain  copy
 
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using DG.Tweening;  
  4. using UnityEngine.UI;  
  5.   
  6. public class Test2 : MonoBehaviour {  
  7.   
  8.     public Transform t;  
  9.     public Text text;  
  10.   
  11.     // Use this for initialization  
  12.     void Start ()   
  13.     {  
  14.         //Vector3.zero是絕對位置,表示從Vector3.zero移動到當前位置  
  15.         //t.DOMove(Vector3.zero, 2).From();  
  16.   
  17.         //默認爲false  
  18.         //Vector3.forward是相對位置,表示從Vector3.forward加當前位置移動到當前位置  
  19.         t.DOMove(Vector3.forward, 2).From(true);  
  20.   
  21.         //逐字顯示  
  22.         text.DOText("宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥", 3);  
  23.     }  
  24.       
  25. }  

相關文章
相關標籤/搜索