插件-DOTween

it2025-09-30  4

简介

实例

写法

通用: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); //后续操作 Tween myTween = transform.DOMove(new Vector3(2,2,2), 2) .SetEase(Ease.OutQuint) .SetLoops(4) .OnComplete(myFunction); //复制操作SetAs() material.DOColor(Color.red, 2).SetAs(myTween);

生命周期

完成即止,自动销毁,若是之后还需要使用,就设置SetAutoKill(false) 如果物体null ,有safemode

关键字

Tween:对象总称Tweener:某单个对象Sequence:多个单个对象的组合

语法

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时间缩放)

image

dofillamount

recttransform

dosizedelta

slider

dovalue

sequence

//相当于一个tween队列 依次执行相应的tween append(在队尾插入tween) prepend(在队首插入tween) appendinterval(在队尾插入延迟的时间) prependinterval(在队首插入拖延时间) appendcallback(每一个tween后添加完成的回调) prependcallback(添加的好像是再整个sequence开始回调) insert(在某时间插入tween,和本身tween队列不冲突,同时进行) join(和最后一个tween同时进行) 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的默认设置 dotween.timescale:全局时间缩放

set

setdelay(延迟发生) setas(复制tween) setautokill setease setid(int,string) setloops

callback

oncomplete(完成时) onkill(kill时,可以设置autokill) onplay(开始或者被暂停之后开始) onpause(暂停或者当autokuii=true完成时) onrewind(去了返回到开始时) 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是否进行 isplaying //清除 dotween.clear

coroutine

IEnumerator SomeCoroutine() { Tween myTween = transform.DOMoveX(45, 1); yield return myTween.WaitForCompletion(); Debug.Log("Tween completed!"); } WaitForCompletion WaitForkill WaitForstart WaitForrewind //坐标到达 Tween myTween = transform.DOMoveX(45, 1); yield return myTween.WaitForPosition(0.3f)

再次学习

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"); }

执行先后顺序:若是不冲突的 则Sequence和Tweener同时进行;若是冲突了 也是同时进行 只是后面的效果显现出来

//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那样进行 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每完成一个tweener之后可以插入此方法

SetId既可以字符串也可以数字 可以通过DOTween.OnXXX()来引发Tweener的对应事件

最新回复(0)