0%

DOTween插件入门

Dotween——动画效果

Dotween——动画效果

DOTween 是一个快速、高效、完全类型安全的 Unity 面向对象动画引擎,针对 C# 用户进行了优化,免费和开源,具有大量高级功能。

要使用Dotween,需要导入名字空间

using DG.Tweening

也可以不导入,然后自己修改Global setting或Specifix settings。

例如:DOTween.Init(autoKillMode, useSafeMode, logBehaviour);

 

初始化

可以自己初始化,也可以默认系统自己初始化,但最好自己初始化。

这个操作也可以在DOTween的GUI中进行,但是代码可以实现中途变换,也就是说第二次初始化DOTween之前创建的tween不会受到这次初始化的影响。

static DOTween.Init(bool recycleAllByDefault=false,bool useSafeMode=true,LogBehaviour logBehaviour=LogBehaviour.ErrorsOnly)

  • recycleAllByDefault——设置为false说明不进行回收,结束后直接销毁
  • useSafeMode——设置为true会使tween更慢但更安全,允许允许时处理事件
  • LogBehaviour——根据所选模式进行错误、警告等信息记录

 

API

有一些小技巧能初步认识函数方法:

DO: 动作操作前缀。例如:DoMove(),DoKill()等等。 Set:动画设置操作前缀。例如:SetLoop(),SetEase()等等。 On: 响应回调事件前缀。例如: OnStart(),OnComplete()等等。

 

生命周期

在创建tween是,会自动播放。

结束后会自动终止。

更改autoKill为FALSE,则不会自动清除tween,可以实现重复使用。

不需要手动回收tween。

 

OnComplete(TweenCallback callback):动画完成触发事件

OnKill(TweenCallback callback):动画被销毁时触发

OnPlay(TweenCallback callback):当动画播放的时候触发,每次播放都会触发

OnPause(TweenCallback callback):当动画暂停时

OnRewind(TweenCallback callback):动画被重置时

OnStart(TweenCallback callback):当动画第一次播放的时候,再播的时候不会被触发了

OnStepComplete(TweenCallback callback):完成单个循环开始调用

OnUpdate(TweenCallback callback):每一帧调用

OnWaypointChange(TweenCallback callback):路径回调

 

使用方式

小白版:DOTween.To(()=>myValue,x=>myValue=x,100,1);

第一个lambda表达式表示将myValue返回给起始值,myValue是提前设置好的一个变量,中间的lambda表示更新数,x会由DOTween自动更新,然后赋予给myValue然后实现更新,100则是最终目标值,1代表时间,也就是说这一句表示myValue过渡到100,时间为1

原型为DOTween.To(getter,setter,to,float duration)

  • getter——一个委托,将属性的值返回给补间
  • setter——一个委托,将属性的值设置给补间
  • to——要到达的最终值
  • duration——补间持续时间

专业版:transform.DOMoveX(100,1);

表示直接将目标对象当前的X坐标平滑过渡到100,时间为1

这是与一些已知Unity对象的适用方法,例如Transform、Rigidbody、Material

这些快捷方式有一个from版本,例如transform.DOMoveX(100,1).from();指将对象从这个值缓动为当前值

 

这两种方式都会返回一个tween,用于储存为引用以后再次使用。

一些详细的基本使用方式:

DOTween - 文档 (demigiant.com)

其他方法:

Pause():暂停动画

SetLoops(3):循环3次

 

Sequences(序列)

不要使用空序列!!!

序列指一堆补间分为一组进行处理,同样一堆序列也可以分为一组,深度没有任何限制。——不过被嵌套的序列会被锁定

补间只能嵌套在单个序列中,不能重复分组。

初始化:

Sequence mySequence = DOTween.Sequence();

一些新概念:

回调函数——//todo

用以下方法操控序列:

  • Append(Tween tween)——添加一个tween
  • AppendCallback(TweenCallback callback)——添加一个回调函数
  • AppendInterval(float interval)——添加一个时间间隔
  • Insert(float atPosition,Tween tween)——在给定的时间位置插入给定的补间,这样一来可以重叠补间
  • InsertCallback(float atPosition,TweenCallback callback)——如上,现在是插入回调函数
  • Join(Tween tween)——在刚插入的最后一个补件或回调的位置同时插入新补间
  • Prepend(Tween tween)——在序列最前面添加
  • PrependCallback(TweenCallback callback)——同上
  • PrependInterval(float interval)——同上

文档中的原话“You can create Sequences made only of callbacks and use them as timers or stuff like that.”

意思是可以利用回调函数与间隔时间这两个特性设置动画版计时器,而且会更加精准。

using UnityEngine;
using DG.Tweening;

public class MyScript : MonoBehaviour
{
private Sequence timerSequence;
private float elapsedTime;

private void Start()
{
    // 创建仅包含回调函数的序列动画
    timerSequence = DOTween.Sequence();

    // 设置初始时间和计时间隔
    elapsedTime = 0f;
    float interval = 1f; // 1秒钟的间隔

    // 添加回调函数到序列动画中,用作定时器
    timerSequence.AppendCallback(TimerCallback).SetDelay(interval).SetUpdate(UpdateType.TimeScaleIndependent);
    
    // 播放序列动画
    timerSequence.Play();
}

private void TimerCallback()
{
    // 在每个间隔触发的回调函数中执行自定义逻辑
    elapsedTime += 1f;
    Debug.Log("Elapsed Time: " + elapsedTime + " seconds");

    // 可以在此检查条件是否满足,然后执行其他操作
}

}

效果是在控制台是输出秒数

注意格式timerSequence.AppendCallback(TimerCallback).SetDelay(interval).SetUpdate(UpdateType.TimeScaleIndependent);

说明可以这样快捷添加补间等操作

一般情况下在序列创建完后需要添加以下语句:

  • mySequence.SetAutoKill(false)——不自动销毁
  • mySequence.Pause()——暂停播放等待mySequence.Play()控制播放

 

相关设置

全局设置包括一些安全模式,日志模式等,也可以设置播放模式,这些可以在GUI界面设置,具体函数可以参考文档。

这里附上一些重要的:

  • SetAs

说明这个之前先了解一下Tween类与TweenParams类

Tween类创造的对象用来储存补间动画,可以通过这个对象来设置对象的属性

TweenParams类对象用来储存补间动画的属性

Tween myTween = transform.DOMoveX(10, 1);

TweenParams myParams = new TweenParams();

//设置myParams后

myTween.SetAs(myParams);

如果补间一开始,则不起作用

  • SetAutoKill(bool autoKillOnCompletion = true)——设置自动销毁
  • SetEase(Ease easeType \ AnimationCurve animCurve \ EaseFunction customEase)——设置补间曲线,更改比如缓变过程怎样变换等
  • SetLoops(int loops,LoopType loopType = LoopType.Restart)——设置循环

剩余可以查看文档