unity之dotween的用法

4,068 阅读4分钟

DoTween常用方法

Tweener的设置

参数设值的两种方法:链式方法的调用

//引入命名空间
using DG.Tweening;
  void Start(){
      transform.DOMove(Vector3.one,1).SetLoops(-1,LoopType.Yoyo);
  }

这里函数后面都可以.下去

1、SetLoops-循环 :

  • 1参数:时长(无限为-1)
  • 2参数类型:Yoyo(圆点到移动位置往复) ; Incremental(递增) ;Restart(原点-重新开始)

相同效果调用通过dotween参数的形式

通过dotween参数的形式

void Start(){
      TweenParams tp = new TweenParams();
        tp.SetLoops(-1,LoopType.Yoyo);
        transform.DOMove(Vector3.one, 1).SetAs(tp); //用.SetAs(tp)去执行点前面的内容
  }

2、设置参数:

  • 用.SetAs(tp)去执行点前面的内容

transform.DOMove(Vector3.one, 1).SetAs(tp);

3、设置自动杀死动画

  • 用.SetAutoKill()动画完成后会自动执行销毁

transform.DOMove(Vector3.one, 1).SetAs(tp).SetAutoKill();

4、from补间

  • 用.From()目标值移动到圆点位置;
  • 若原点与移动点相同,在不给From()参数值的情况下,不会移动
  • 若From()有值,TRUE的话则 原点+移动点=目标值
  • 若FALSE,则传入值 = 目标值

transform.DOMove(Vector3.one, 1).From();

5、设置动画延时

  • 延迟时间方式执行
//transform.DOMove(Vector3.one, 1).SetDelay(3);

6、设置动画运动以速度为基准

  • 使用SetSpeedBased时,移动方式就变成以速度为基准
  • 若SetSpeedBased里值为TRUE,是基于速度的方式移动;
  • FALSE的话则不是速度,而是时间
  • 原本表示持续时间的第二个参数,就变成表示速度的参数,每秒移动的单位数
transform.DOMove(Vector3.one, 10).SetSpeedBased(false);

7、设置动画ID

  • 值可为字符串或数值、对象类型
transform.DOMove(Vector3.one, 2).SetId("ID03");
DOTween.Play("ID03");

8、设置是否是可回收的

  • 为true的话,动画播放完会被回收,缓存下来,不然播完就直接销毁
transform.DOMove(Vector3.one, 2).SetRecyclable();

9、有一个相对的,设置动画为增量运动

  • 相对前方的值做一个增量运动
  • SetRelative参数 isRelative(相对的):
  • 为true,传入的就是偏移量,即当前坐标 + 传入值 = 目标值
  • 为falese,传入的就是目标值,即传入值 = 目标值
transform.DOMove(Vector3.one, 10).SetRelative();

10、updata帧类型:SetUpdate

  • 第一个参数 UpdateType :选择使用的帧函数
  • UpdateType.Normal:更新每一帧中更新要求。
  • UpdateType.Late:在LateUpdate调用期间更新每一帧。
  • UpdateType.Fixed:使用FixedUpdate调用进行更新。
  • UpdateType.Manual:通过手动DOTween.ManualUpdate调用进行更新。
  • 第二个参数:为TRUE,则补间将忽略Unity的Time.timeScale,不受其影响
  • Time.timeScale = 0;//播放时间的缩放值,当它为0时,Update里的东西就不执行了
ransform.DOMove(Vector3.one, 2).SetUpdate(UpdateType.Normal,true);

Sequence

序列

  • 添加动画到队列中、添加时间间隔
void Start()
 {
     //创建一个队列,把要做的动作引入该队列中
     Sequence sequence = DOTween.Sequence();
    
     //**动画1**添加动画到队列中
     sequence.Append(transform.DOMove(Vector3.one,4)); //0-4
     
     //中间暂停两秒钟,时间间隔
     sequence.AppendInterval(1); //4-**5**
     
     //动画2
     sequence.Append(transform.DOMove(new Vector3(5,0,0),3)); // 5-8
 }
 

-按时间点插入动画

//按时间点插入或替换动画:Insert(插入到规定的时间点,插入位置动画)
//这里总时长不变
sequence.Insert(10,transform.DOMove(-Vector3.one,2));

-加入当前动画

方法1、

//边移动边放大缩小
//方法1、`Insert`
sequence.Insert(0,transform.DOScale(Vector3.one*2,4));
sequence.Insert(5,transform.DOScale(Vector3.one,3));

方法2、join

例子:

        //创建一个队列,把要做的动作引入该队列中
        Sequence sequence = DOTween.Sequence();
        //动画1
        sequence.Append(transform.DOMove(Vector3.one,4)); //0-4
        // 方法2、join:执行过程中加入放大动画
        sequence.Join(transform.DOScale(Vector3.one * 2, 4));

        //2、增加一个回调
        sequence.AppendCallback(appendCallBack);

        //中间暂停两秒钟,时间间隔
        sequence.AppendInterval(1); //4-5

        //动画2
        sequence.Append(transform.DOMove(new Vector3(5,0,0),3)); // 5-8
        sequence.Join(transform.DOScale(Vector3.one, 3));

-预添加动画、预添加时间间隔

//预添加 会直接添加动画到Append的前面,也就是最开始的时候
sequence.Prepend(transform.DOMove(-Vector3.one, 4));
//预添加时间间隔 
quence.PrependInterval(1);

执行顺序问题 它也采取了队列的性质,不过,预添加与原本的的队列相比是一个反向队列 预添加和添加一个是后进先出,一个是先进先出

例如:

Sequence quence = DOTween.Sequence(); 
quence.Append(transform.DOMove(Vector3.one, 2)); 
quence.Prepend(transform.DOMove(-Vector3.one*2, 2)); 
quence.PrependInterval(1);

//执行顺序是 PrependInterval----Prepend-----Append 
//就是最后添加的会在队列的最顶端

-回调函数

某一动作执行完毕后去执行某一函数:这里可以监督动作执行完之后

//1、在规定的时间点加入回调
sequence.InsertCallback(4,appCallBack);

//2、增加一个回调
sequence.AppendCallback(appendCallBack);

//3、预添加回调
sequence.PrependCallback(prependCallBack);


参考文章:吴俊荣

Ease运动曲线的设置

曲线是个枚举类型

1、以Ease枚举作为参数

/*
         第一个参数 类型,有很多值
         第二个参数 Amplitude(振幅):实际就是移动次数,起始点移动到目标算移动一次,再移动回来移动两次
         第三个参数 period 值的范围是 - 1~1
          值 > 0时,为活动范围的衰减值,活动范围会由大变小
          值 = 0时,就是均匀的在起始坐标和目标坐标之间运动
          值 < 0时,会施加一个向目标坐标的一个力,活动范围一点点增大,最后逼近目标点
         这两个参数只对Flash, InFlash, OutFlash, InOutFlash这四种曲线有用,其他的曲线起作用的就只有Ease枚举参数
*/
        transform.DOMove(Vector3.one, 2).SetEase(Ease.Linear);