Unity DOTween 插件的简单了解

引用 DOTween 官网上对该插件的介绍:

“ DOTween是一种快速、高效、类型安全的面向对象的补间动画引擎 ”

利用 DOTween,我们可以很方便快速的完成许多动画效果,而且因为一切都被缓存并重用,避免了无用的GC分配

DOTween 特性

非常准确

时间以非常精确的方式进行计算:这意味着每次的循环播放将完全一致

一切皆可动画化

DOTween 可以为每个数值和一些非数字值生成动画,甚至可以为字符串设置动画

完全控制

通过播放、暂停、倒带、重新启动、完成、转到和其他有用的方法来控制补间动画

在播放时更改值和持续时间

即使动画正在播放,也可以随时更改补间动画的开始、结束值或者持续时间

DOTween 插件

在导入新的 DOTween 更新后,必须重新设置 DOTween 才能根据 Unity 版本导入或重新导入其他库

这需要从 "Tools / Demigiant" 菜单中打开 DOTween 工具面板,然后在面板中选择 "Setup DOTween..."

DOTween 使用

使用 DOTween,需要在该类 / 脚本中加入如下引用:

命名前缀:

DO:动作操作前缀。例如 DoMove(),DoKill() 等等

Set:动画设置操作前缀。例如 SetLoop(),SetEase() 等等

On:响应回调事件前缀。例如 OnStart(),OnComplete() 等等

DO 说明:

DOMove() 修改的是物体的世界坐标

DOLocalMove() 修改的是物体的局部坐标

DOMoveX() / DOLocalMoveX() 修改的只有物体的X轴坐标

DOMoveY() / DOLocalMoveY() 修改的只有物体的Y轴坐标

DOText() 文字打印效果

DOColor() 修改颜色

DOFade() 透明度渐变

DOShakePosition() 震动效果

Set 说明:

SetEase() 设置动画曲线。不同的曲线代表了不同的运动状态,可以通过 "Ease.曲线样式" 来设置一个想要的动画曲线

这里可以参考 👉 | https://easings.net | 👈 上的曲线效果

SetLoops() 设置动画的循环次数(-1 为无限循环)

SetUpdate() 设置更新方式(true 动画不受 timeScale 影响)

On 说明:

OnStart() 当动画第一次运行时的事件函数

OnUpdate() 当动画播放 / 更新时的事件函数

OnPlay() 当动画播放时的事件函数

OnPause() 当动画暂停时的事件函数

OnComplete() 当动画结束时的事件函数

OnKill() 当动画完全结束或者被杀死时的事件函数

OnRewind() 当动画倒放结束时的事件函数

Sequence 说明:

Sequence 相当于一个 Tweener 的链表,通过执行一个 Sequence 来执行一串 Tweener,来制作和实现复杂的过渡动画

Append(Tween tween) 在 Sequence 的最后添加一个 Tween

AppendCallback(TweenCallback callback) 在 Sequence 的最后添加一个回调函数

AppendInterval(float interval) 在 Sequend 的最后添加一段时间间隔

Insert(float atPosition,Tween tween) 在给定的时间位置上放置一个 tween,可以实现同时播放多个 tween 的效果

InsertCallback(float atPosition,TweenCallback callback) 在给定的时间位置上放置一个回调函数

Join(Tween tween) 在 Sequence 的最后一个 tween 的开始处放置一个 tween

Prepend(Tween tween) 在 Sequence 的开始处插入一个 tween,原先的内容根据时间往后移

PrependCallback(TweenCallback callback) 在 Sequence 的开始处插入一个回到函数

PrependInterval(float interval) 在 Sequence 的开始处插入一段时间间隔,原先的内容根据时间往后移

DOTween 效果

一、移动动画:

using DG.Tweening;
public class DOTWeenTest : MonoBehaviour
{
  void Start()
    {
        transform.DOMove(new Vector3(4, 3, 0), 3); // 物体3秒从当前位置移动到世界坐标(4,3,0)位置
    }
}

二、正放与倒放动画

using DG.Tweening;
public class DOTWeenTest : MonoBehaviour
{
    Tweener twe;
    void Start()
    { 
        twe = transform.DOMove(new Vector3(3, 4, 0), 2); // 将动画保存在Tweener对象中 
        twe.Pause(); // 暂停动画,防止自动播放  
        twe.SetAutoKill(false); // 关闭动画自动销毁  
    }
    // 正放动画效果
    public void Forward()
    {
        twe.PlayForward();
    }
    // 倒放动画效果
    public void Back()
    {
        twe.PlayBackwards();
    }
}

三、颜色动画

using DG.Tweening;
public class DOTWeenTest : MonoBehaviour
{
  void Start()
    {
         Material material = GetComponent<MeshRenderer>().material;
       material.DOColor(Color.red, 3); // 让对象的颜色在3秒内变成红色
    }
}

四、动画事件

using DG.Tweening; //引入命名空间
public class DOTWeenTest : MonoBehaviour
{
    Material material;
    Tweener twe;

    void Start()
    {
        material = GetComponent<MeshRenderer>().material;
        twe = material.DOColor(Color.red, 3); // 3秒变红
        twe.OnComplete(ChangeColour); // 在动画播放结束时调用
    }
    // 更改颜色
    void ChangeColour()
    {
        twe = material.DOColor(Color.blue, 2); // 2秒变蓝
    }
}

五、文本动画

using DG.Tweening;
public class DOTWeenTest : MonoBehaviour
{
     void Start()
     {
         Text text = GetComponent<Text>();
         Tweener twe = text.DOText("下面是有奖竞猜:", 2);
         twe.OnComplete(() =>
         {
             text.text = "";
             text.DOText("富奸老贼是怎么死的?", 2);
         });
     }
}

六、屏幕抖动动画

using DG.Tweening;
public class DOTWeenTest : MonoBehaviour
{
    void Start()
     {
         //transform.DOShakePosition(2); // 在随机方向震动2秒,幅度默认为1
         transform.DOShakePosition(2, 3); // 在随机方向震动2秒,振幅为3
         //transform.DOShakePosition(3, new Vector3(0, 2, 0)); // 只在世界坐标Y轴上震动3秒,振幅为2
     }
}

抖动动画不仅有位置上的抖动,还有旋转上的抖动和缩放上的抖动:

using DG.Tweening;
public class DOTWeenTest : MonoBehaviour
{
    void Start()
     {
          // 缩放抖动的效果
          transform.DOShakeScale(2, new Vector3(3, 2, 0));
     }
}

以上效果图来自👉DOTween插件使用技巧 

通过对 DOTween 的简单了解,它基本上能够满足各种动画的需求,性能也相当出色,最关键的是:DOTween 是对 Unity 的原生API进行扩展,使用起来非常便捷

 

 

 
 
 
👉 |  以上内容仅为学习参考、学习笔记使用  | 👈
posted @ 2022-10-13 10:54  Mr.Cat~  阅读(2783)  评论(0编辑  收藏  举报