官方文檔連接: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類的一些靜態方法或者變量來修改全局設置:
- static LogBehaviour DOTween.logBehaviour
- static bool DOTween.showUnityEditorReport
- static float DOTween.timeScale
- static bool DOTween.useSafeMode
- static DOTween.SetTweensCapacity(int maxTweeners, int maxSequences)
-
-
- static bool DOTween.defaultAutoKill
- static AutoPlay DOTween.defaultAutoPlay
- static float DOTween.defaultEaseOvershootOrAmplitude
- static float DOTween.defaultEasePeriod
- static Ease DOTween.defaultEaseType
- static LoopType DOTween.defaultLoopType
- static bool DOTween.defaultRecyclable
- static bool DOTween.defaultTimeScaleIndependent
- 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.
- static DOTween.To(getter, setter, to, float duration)
- 以DOTween.To(() => myVector, x => myVector = x, new Vector3(3, 4, 8), 1);爲例,就是對myVector進行插值,目標值爲Vector3(3, 4, 8)
2.
- transform.DOMove(new Vector3(2,3,4), 1);
- rigidbody.DOMove(new Vector3(2,3,4), 1);
- 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.
- static DOTween.Punch(getter, setter, Vector3 direction, float duration, int vibrato, float elasticity)
- static DOTween.Shake(getter, setter, float duration, float/Vector3 strength, int vibrato, float randomness, bool ignoreZAxis)
- static DOTween.ToAlpha(getter, setter, float to, float duration)
- static DOTween.ToArray(getter, setter, float to, float duration)
- static DOTween.ToAxis(getter, setter, float to, float duration, AxisConstraint axis)
-
- static DOTween.To(setter, float startValue, float endValue, float duration)
建立Sequence:
Sequence能夠包含Sequence,當執行一個Sequence時會順序執行Tweener,可使用Insert方法實現同時執行。
Sequence的方法:
- static DOTween.Sequence()
-
- Append(Tween tween)
- AppendCallback(TweenCallback callback)
- AppendInterval(float interval)
- Insert(float atPosition, Tween tween)
- InsertCallback(float atPosition, TweenCallback callback)
- Join(Tween tween)
- Prepend(Tween tween)
- PrependCallback(TweenCallback callback)
- PrependInterval(float interval)
例子:
- Sequence mySequence = DOTween.Sequence();
- mySequence.Append(transform.DOMoveX(1, 1));
- mySequence.Append(transform.DORotate(new Vector3(0, 180, 0), 1));
- mySequence.PrependInterval(1);
- mySequence.Insert(0, transform.DOScale(new Vector3(3, 3, 3), mySequence.Duration()));
等同於:
- Sequence mySequence = DOTween.Sequence();
- mySequence.Append(transform.DOMoveX(45, 1))
- .Append(transform.DORotate(new Vector3(0, 180, 0), 1))
- .PrependInterval(1)
- .Insert(0, transform.DOScale(new Vector3(3, 3, 3), mySequence.Duration()));
上面咱們提到了全局設置,這裏咱們再說一說針對Tweener和Sequence的局部設置
- float timeScale
-
- SetAs(Tween tween \ TweenParams tweenParams)
- SetAutoKill(bool autoKillOnCompletion = true)
- SetEase(Ease easeType \ AnimationCurve animCurve \ EaseFunction customEase)
- SetId(object id)
- SetLoops(int loops, LoopType loopType = LoopType.Restart)
- SetRecyclable(bool recyclable)
- SetUpdate(UpdateType updateType, bool isIndependentUpdate = false)
- 注意的一點是SetUpdate方法可讓目標忽略timeScale
回調方法:
- OnComplete(TweenCallback callback)
- OnKill(TweenCallback callback)
- OnPlay(TweenCallback callback)
- OnPause(TweenCallback callback)
- OnRewind(TweenCallback callback)
- OnStart(TweenCallback callback)
- OnStepComplete(TweenCallback callback)
- OnUpdate(TweenCallback callback)
- 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中
- TweenParams tParms = new TweenParams().SetLoops(-1).SetEase(Ease.OutElastic);
- transformA.DOMoveX(15, 1).SetAs(tParms);
- transformB.DOMoveY(10, 1).SetAs(tParms);
操做Tweener(有三種方法):
1.DOTween靜態方法
- DOTween.PauseAll();
- DOTween.Pause("badoom");
- DOTween.Pause(someTransform);
2.Tweener方法
3.部件.+以DO開頭的方法
以上的是Pause方法,如下的是其他的操做方法。上面三種方式中,DOTween和Tweener都有如下的操做方法,而部件的話,要在前面加上"DO"。
- CompleteAll/Complete()
- FlipAll/Flip()
- GotoAll/Goto(float to, bool andPlay = false)
- KillAll/Kill(bool complete = true)
- PauseAll/Pause()
- PlayAll/Play()
- PlayBackwardsAll/PlayBackwards()
- PlayForwardAll/PlayForward()
- RestartAll/Restart(bool includeDelay = true)
- RewindAll/Rewind(bool includeDelay = true)
- TogglePauseAll/TogglePause()
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
實例:
1.
- using UnityEngine;
- using System.Collections;
- using DG.Tweening;
-
- public class Test : MonoBehaviour {
-
- public RectTransform rt;
- private bool isIn = false;
-
-
- void Start ()
- {
-
-
-
- Tweener t = rt.DOLocalMove(Vector3.zero, 0.3f);
-
- t.SetAutoKill(false);
- t.Pause();
- }
-
- public void OnClick ()
- {
- if (!isIn)
- {
-
- rt.DOPlayForward();
- }
- else
- {
- rt.DOPlayBackwards();
- }
- isIn = !isIn;
- }
- }
2.
- using UnityEngine;
- using System.Collections;
- using DG.Tweening;
- using UnityEngine.UI;
-
- public class Test2 : MonoBehaviour {
-
- public Transform t;
- public Text text;
-
-
- void Start ()
- {
-
-
-
-
-
- t.DOMove(Vector3.forward, 2).From(true);
-
-
- text.DOText("宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥", 3);
- }
-
- }