插件-DOTween

这篇博客详细介绍了DOTween动画插件的使用,包括简介、实例、写法、生命周期和关键字。讨论了如何操作audio、camera、transform等元素,并强调了Sequence和Tweener的执行顺序以及回调函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

实例

写法
  • 通用: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");
}
  1. 执行先后顺序:若是不冲突的 则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");
  2. 对于Sequence,appendcallback每完成一个tweener之后可以插入此方法

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值