插件-DOTween

简介

实例

写法

  • 通用: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的对应事件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容

  • 1.命名前缀DO: 动作操作前缀。 例如:DoMove(),DoKill()等等。 Set:动画设置操作前缀。例如...
    胤醚貔貅阅读 2,398评论 1 3
  • 文章内容: 一、认识DoTween插件 二、通过UGUI制作血条的三种方法 认识DoTween: Using DG...
    Joe_Game阅读 1,907评论 0 0
  • DOTweenPath可以为变量制作动画,也可以设置物体移动的路径,还可以制作屏幕震动效果。可以在任意时刻实例化路...
    道阻且长_行则将至阅读 15,761评论 0 2
  • 1.命名前缀 DO:动作操作前缀。例如:DoMove(),DoKill()等等。 Set:动画设置操作前缀。例如:...
    LK_LK阅读 2,260评论 0 0
  • 原创首发 【龙七七7.3】我会飞 ——坚持第166天 一.我会飞 我会飞行。 我看见河道在我眼前不断向后飞去,向右...
    龙七七阅读 283评论 3 3