DoTween 默認配置加上鏈式調用API風格,配上lambda匿名函數調用,非常簡單清晰好用。DoTween實現了通用的緩動算法,能夠配置出各種想要的動畫效果。另外,隊列延遲回調函數,也能完成各種異步延遲執行功能。
DoTween 為各種Unity的對象做了函數綁定,方便調用。比如Transform, Color, Text, Material等都可以直接調用DoTween的動畫API。我們先從通用的動畫函數來了解。
- public static Tweener To(DOGetter<T> getter, DOSetter<T> setter, T endValue, float duration)
- // 創建一個 Tweener 從當前坐標0.5秒移動到坐標Vector3(100, 100, 100)位置
- Tween tween = DOTween.To
- (
- () => transform.position,
- (x) => transform.position = x,
- new Vector3(100, 100, 00),
- 0.5f
- );
參數T可以是各種數值類型,比如int,float,long ,vector等。getter, setter就是兩個代理函數,可以使用匿名函數傳入。getter 用來獲取當前需要設置的值,setter用來設置當前數值,參數x是有DoTween計算過后的數值。endValue就是最終的數值,duration是使用的時間。和標准的Tween動畫是一樣的。
getter, setter可以是多條語句的函數,就需要用{}括起來。理解起來就是,DoTween利用傳入的兩個函數,來獲取初始值和每幀設置值,這樣就能驅使數值的變化反映到屬性上。這里返回tween對象,是為了鏈式調用,DoTween幾乎所有的函數調用都會返回tween對象,能夠繼續調用其他函數。
- DOTween.To
- (
- () => audio.volume,
- (v) => audio.volume = v,
- 1.0f,
- 10
- )
- .OnComplete
- (
- () =>
- {
- // 回調執行
- }
- )
- .SetEase(Ease.OutSine);
比如,這里我們鏈式調用了完成時候的回調函數,和設置緩動算法。緩動對象可以枚舉所有通用的緩動算法。
另外,還有一個專門對顏色處理的通用函數。
- Image stepImage = transoform.GetComponent<Image>();
- DOTween.ToAlpha
- (
- () => stepImage.color,
- (c) => stepImage.color = c,
- 0,
- 0.5f
- );
這里和To的函數調用相似,只是這里僅僅會變化alpha數值來改實現變透明度的動畫。
接下來就是一些列綁定Transform, Color, Text, Material的使用。
- // 0.5秒內局部坐標變化到10,10,10
- transform.DOLocalMove(new Vector3(10, 10, 10), 0.5f);
- // 0.5秒內x世界坐標變換到5
- transform.DOMoveX(5, 0.5f);
- // 0.5f秒內世界坐標相對當前,運動到5,5,5, 使用OutCubic緩動算法
- transform.DOBlendableMoveBy(new Vector3(5, 5, 5), 0.5f).SetEase(Ease.OutCubic)
- // text 2秒內漸變透明到0
- text.DOFade(0, 2f).SetEase(Ease.OutSine);
- // 0.3秒內材質屬性fade變化到5,使用緩動算法
- material.DOFloat(5, "_fade", 0.3f).SetEase(Ease.OutSine);
- // 5秒內彈跳3次,彈到10,10,10位置
- transform.DOJump(new Vector3(10, 10, 10), 3, 5f);
總結起來就是:
- Do開頭,帶Local的就是局部坐標系,不帶的就是世界坐標系
- 所有函數調用都是鏈式調用
- 可以自己設置緩動算法類型,也可以用一些配好的,比如Jump
- 符合直覺得API,move就是移動,scale就是縮放,rotation就是旋轉,color就是顏色,數值的變化就是Float
- 更多的功能用法直接在程序中自動補全就可以理解意思
- DOTween.Sequence();
- Append(tweener) 可以再隊里追加一個tweener,會按照順序依次執行這個tweener,一個tweener完成執行下一個。也就是說上面產生的tweener都能放進去。
- Insert(time, tweener) 可以再隊列插入高一二tweener,第一個參數時間,就是在這個隊列執行多少時間后,執行插入的tweener。
- AppendInterval(time) 追加一個事件間隔,在隊列執行的過程中,停頓一個事件,然后繼續執行。
- AppendCallback(func) 追加一個匿名函數,在隊列中執行一個回調。
- DOTween.Sequence()
- .Append
- (
- go.transform.DOBlendableMoveBy(new Vector3(0, move, 0), 0.5f).SetEase(Ease.OutCubic)
- )
- .Append
- (
- go.transform.DOBlendableMoveBy(new Vector3(0, move, 0), 1.5f).SetEase(Ease.OutSine)
- )
- .Insert
- (
- 0.8f,
- text.DOFade(0, 2f).SetEase(Ease.OutSine)
- )
- .AppendCallback
- (
- () =>
- {
- DestroyImmediate(go);
- }
- );
- DOTween.Sequence()
- .AppendInterval(0.1f)
- .AppendCallback
- (
- () =>
- {
- dialog.OnOpenComplete();
- }
- )
- .Play();