簡介
實(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);
生命周期
- 完成即止,自動銷毀用爪,若是之后還需要使用哩至,就設(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(抖動式)
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
//儲存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");
}
-
執(zhí)行先后順序:若是不沖突的 則Sequence和Tweener同時(shí)進(jìn)行油航;若是沖突了 也是同時(shí)進(jìn)行 只是后面的效果顯現(xiàn)出來
//1. X方向先5s后面 再15s前面 會突然瞬移到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");
對于Sequence,appendcallback每完成一個(gè)tweener之后可以插入此方法
SetId既可以字符串也可以數(shù)字 可以通過DOTween.OnXXX()來引發(fā)Tweener的對應(yīng)事件