插件-DOTween

簡介

實(shí)例

寫法

  • 通用:DoTween.To(()=>value,x=>value=x,100,1)

  • 簡潔:transform.DOMoveX(100,1)

  • 混合:

    //用完即止
    transform.DOMove(new Vector3(2,2,2), 2)
      .SetEase(Ease.OutQuint)
      .SetLoops(4)
      .OnComplete(myFunction);
    
    //后續(xù)操作
    Tween myTween = transform.DOMove(new Vector3(2,2,2), 2)
      .SetEase(Ease.OutQuint)
      .SetLoops(4)
      .OnComplete(myFunction);
    
    //復(fù)制操作SetAs()
    material.DOColor(Color.red, 2).SetAs(myTween);
    

生命周期

  • 完成即止,自動(dòng)銷毀,若是之后還需要使用,就設(shè)置SetAutoKill(false)
  • 如果物體null ,有safemode

關(guān)鍵字

  • Tween:對象總稱
  • Tweener:某單個(gè)對象
  • Sequence:多個(gè)單個(gè)對象的組合

語法

audio

dofade

camera

doshakeposition
doshakerotation

transform

domove  dolocalmove
dojump  dolocaljump
dorotate    dolocalrotate   dorotatequaternion  dolocalqotatequaternion
dolookat
doscale
dopunchposition/rotation/scale(反彈式 可以抖一次)
doshakeposition/rotation/scale(抖動(dòng)式)

tween

dotimescale(改變tween時(shí)間縮放)

image

dofillamount

recttransform

dosizedelta

slider

dovalue

sequence

//相當(dāng)于一個(gè)tween隊(duì)列 依次執(zhí)行相應(yīng)的tween
append(在隊(duì)尾插入tween)
prepend(在隊(duì)首插入tween)

appendinterval(在隊(duì)尾插入延遲的時(shí)間)
prependinterval(在隊(duì)首插入拖延時(shí)間)

appendcallback(每一個(gè)tween后添加完成的回調(diào))
prependcallback(添加的好像是再整個(gè)sequence開始回調(diào))

insert(在某時(shí)間插入tween,和本身tween隊(duì)列不沖突,同時(shí)進(jìn)行)
join(和最后一個(gè)tween同時(shí)進(jìn)行)

Sequence mySequence = DOTween.Sequence();
mySequence.Append(transform.DOMoveX(45, 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()));

settings

//dotween的默認(rèn)設(shè)置
dotween.timescale:全局時(shí)間縮放

set

setdelay(延遲發(fā)生)
setas(復(fù)制tween)
setautokill
setease
setid(int,string)
setloops

callback

oncomplete(完成時(shí))
onkill(kill時(shí),可以設(shè)置autokill)
onplay(開始或者被暫停之后開始)
onpause(暫停或者當(dāng)autokuii=true完成時(shí))
onrewind(去了返回到開始時(shí))
onstart()
onupdate()

tweenparams

//儲(chǔ)存tween操作
TweenParams tParms = new TweenParams().SetLoops(-1).SetEase(Ease.OutElastic);

transformA.DOMoveX(15, 1).SetAs(tParms);
transformB.DOMoveY(10, 1).SetAs(tParms);

control

//停止
DOTween.PauseAll();
DOTween.Pause("badoom");
DOTween.Pause(someTransform);
myTween.Pause();
transform.DOPause();

//完成
complete    completeall
pause   pauseall
kill    killall
play    playall
restart restartall

//停止就開始 開始就停止
togglepause togglrpauseall

//是否綁定tween(是否存在未kill的)
istweening

//tween是否激活(未被kill)
isactive

//tween是否完成(killed返回false)
iscomplete

//tween是否進(jìn)行
isplaying

//清除
dotween.clear

coroutine

IEnumerator SomeCoroutine()
{
    Tween myTween = transform.DOMoveX(45, 1);
    yield return myTween.WaitForCompletion();
    Debug.Log("Tween completed!");
}

WaitForCompletion
WaitForkill
WaitForstart
WaitForrewind

//坐標(biāo)到達(dá)
Tween myTween = transform.DOMoveX(45, 1);
yield return myTween.WaitForPosition(0.3f)

再次學(xué)習(xí)

void Start () {
    Sequence s = DOTween.Sequence();
    s.Append(transform.DOLocalMoveX(20, 5).OnComplete(() => Debug.LogError("s->x end")))
        .AppendCallback(() => Debug.LogError("s->end"))
        .AppendInterval(2)
        .AppendCallback(() => Debug.LogError("s->end"))
        .Append(transform.DOLocalMoveY(20, 5).OnComplete(() => Debug.LogError("s->y end")));
    s.SetId("sequence").OnUpdate(()=>Debug.LogError("s->update"));

    gameObject.transform.DOLocalMoveX(20, 20).SetId("movex").OnKill(BeKill);
    gameObject.transform.DOLocalMoveY(20, 20).SetId(1).OnPause(BePause);
}

void Update () {
    if (Input.GetKeyDown(KeyCode.Space))
    {
        DOTween.Kill("movex");
        DOTween.Pause(1);
        Debug.LogError(DOTween.IsTweening("sequence"));
    }
}

void BeKill()
{
    Debug.LogError("kill");
}

void BePause()
{
    Debug.LogError("pause");
}
  1. 執(zhí)行先后順序:若是不沖突的 則Sequence和Tweener同時(shí)進(jìn)行;若是沖突了 也是同時(shí)進(jìn)行 只是后面的效果顯現(xiàn)出來

    //1. X方向先5s后面 再15s前面 會(huì)突然瞬移到20s的5s所在的x位置
    gameObject.transform.DOLocalMoveX(20, 20).SetEase(Ease.Linear).OnComplete(() => Debug.LogError("complete")).SetId("movex");
    
    Sequence s = DOTween.Sequence();
    s.Append(transform.DOLocalMoveX(20, 5).OnComplete(() => Debug.LogError("x end")))
        .AppendCallback(() => Debug.LogError("end"))
        .AppendInterval(2)
        .AppendCallback(() => Debug.LogError("end"))
        .Append(transform.DOLocalMoveY(20, 5).OnComplete(() => Debug.LogError("y end")))
        .AppendCallback(() => Debug.LogError("end"));
    //2。X方向看上去都是20s那樣進(jìn)行
    Sequence s = DOTween.Sequence();
    s.Append(transform.DOLocalMoveX(20, 5).OnComplete(() => Debug.LogError("x end")))
        .AppendCallback(() => Debug.LogError("end"))
        .AppendInterval(2)
        .AppendCallback(() => Debug.LogError("end"))
        .Append(transform.DOLocalMoveY(20, 5).OnComplete(() => Debug.LogError("y end")))
        .AppendCallback(() => Debug.LogError("end"));
    
    gameObject.transform.DOLocalMoveX(20, 20).SetEase(Ease.Linear).OnComplete(() => Debug.LogError("complete")).SetId("movex");
    
  2. 對于Sequence,appendcallback每完成一個(gè)tweener之后可以插入此方法

  3. SetId既可以字符串也可以數(shù)字 可以通過DOTween.OnXXX()來引發(fā)Tweener的對應(yīng)事件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.命名前綴DO: 動(dòng)作操作前綴。 例如:DoMove(),DoKill()等等。 Set:動(dòng)畫設(shè)置操作前綴。例如...
    胤醚貔貅閱讀 2,547評論 1 3
  • 文章內(nèi)容: 一、認(rèn)識(shí)DoTween插件 二、通過UGUI制作血條的三種方法 認(rèn)識(shí)DoTween: Using DG...
    Joe_Game閱讀 2,096評論 0 0
  • DOTweenPath可以為變量制作動(dòng)畫,也可以設(shè)置物體移動(dòng)的路徑,還可以制作屏幕震動(dòng)效果。可以在任意時(shí)刻實(shí)例化路...
    道阻且長_行則將至閱讀 15,940評論 0 2
  • 1.命名前綴 DO:動(dòng)作操作前綴。例如:DoMove(),DoKill()等等。 Set:動(dòng)畫設(shè)置操作前綴。例如:...
    LK_LK閱讀 2,343評論 0 0
  • 原創(chuàng)首發(fā) 【龍七七7.3】我會(huì)飛 ——堅(jiān)持第166天 一.我會(huì)飛 我會(huì)飛行。 我看見河道在我眼前不斷向后飛去,向右...
    龍七七閱讀 351評論 3 3

友情鏈接更多精彩內(nèi)容