Dotween简单安装设置,DoTween简单的API,以及一些回调

本文档介绍了Unity3D插件DoTween的下载、安装和使用步骤。首先,从官方网址下载DoTween并解压缩,然后将其拖拽到Unity项目的Assets目录下,避免放入特定子文件夹。等待Unity加载并配置插件后,安装即完成,可开始使用DoTween进行动画缓动处理。

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

Unity DOTween动画插件完全指南

一、安装与配置

1.1 下载与安装

  1. 访问DOTween官网下载最新版本
  2. 将下载的压缩包解压后,将整个DOTween文件夹拖入Unity项目的Assets目录
  3. 等待Unity自动导入完成

在这里插入图片描述

注意:不要将DOTween放在Editor、Resources等特殊文件夹内

1.2 初始设置

安装完成后,Unity会自动弹出DOTween设置窗口。如果没有自动弹出,可以通过菜单栏:
Tools > Demigiant > DOTween Utility Panel手动打开。

在这里插入图片描述
在这里插入图片描述

Transform组件的Dotween

Unity 版本Unity2021 1.18f1c1
DoTween版本DOTween_1_2_632
IDEvs2022
系统版本win 10
撰写日期2022年8月

在两个旋转之间来回切换

		//类似汽车的雨刮器
        gameObject.transform.DOLocalRotate(new Vector3(0, 0, 90), 2).SetLoops(-1,LoopType.Yoyo);
		//用两秒钟渐变的旋转到90度,以最短距离
        gameObject.transform.DORotate(new Vector3(90f, 0f, 0f), 2,RotateMode.Fast);

 1. RotateMode.Fast 最快的方式
 2. FastBeyond360 旋转超过360度
 3. WorldAxisAdd 没搞明白
 4. LocalAxisAdd  将给定的旋转添加到转换的局部轴(就像在Unity的编辑器中启用“局部”开关或使用transform. rotate (Space.Self)旋转一个对象)。在这种模式下,最终值总是被认为是相对的 (没搞明白)
		//看向某个目标,只会旋转一次
        gameObject.transform.DOLookAt(cu.transform.position, 2);

在两个点之间坐标进行切换

		//在当前位置与Vector3(4f,4f,4f)之间来回切换,往返的
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f),2).SetLoops(-1,LoopType.Yoyo);
	//在当前位置与Vector3(4f,4f,4f)之间来回切换,耗时2s,每次都从开始点进行
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1,LoopType.Restart);
		//gameobject在两个点   new Vector3(5, 5f, 5f)  之间进行跳跃
        gameObject.transform.DOLocalJump(new Vector3(5, 5f, 5f), 2f, 1, 1).SetLoops(-1,LoopType.Yoyo);
       //DOLocalJump(Vector3 endValue, float jumpPower, int numJumps, float duration, bool snapping)
       //endValue 结束点
       //jumpPower 跳跃的力量,Y轴的高度
       //duration 跳跃的总数,分几次跳跃到目标位置
       //snapping 是否平滑,True不平滑,Flase平滑

来回膨胀和变小

就像是心脏的跳动一样
        gameObject.transform.DOScale(new Vector3(3f,3f,3f),2).SetLoops(-1,LoopType.Yoyo);
//旋转到指定的大小
        gameObject.transform.DOScale(new Vector3(3f, 3f, 3f), 2);

Material.Color

    private Color _OrgionColor = Color.black;
    private Color _TargetColor = Color.green;

    private void Start()
    {
       //可用于提示闪烁效果
        gameObject.GetComponent<MeshRenderer>().material.color = _OrgionColor;
        gameObject.GetComponent<MeshRenderer>().material.DOColor(_TargetColor, 2).SetLoops(-1, LoopType.Yoyo).SetId("DotweenAni");
        //获取材质,设置目标颜色,设置切换次数,切换模式,设置ID。
		
            DOTween.Kill("DotweenAni");//在想要停止的地方调用,可以停止动画

    }

可以多个动画同时播放

//很复杂我描述不出来
        gameObject.transform.DOScale(new Vector3(4f, 4f, 4f), 2).SetLoops(-1,LoopType.Yoyo);
        gameObject.GetComponent<MeshRenderer>().material.DOColor(Color.black, 2).SetLoops(-1, LoopType.Yoyo);
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo);
        gameObject.transform.DORotate(new Vector3(180f,180f,180f),2).SetLoops(-1,LoopType.Yoyo);

使用回调

OnComplete_播放结束时调用

yoyo的次数为-1则不会被调用
在运动三次后调用OnComplete

  private void Start()
    {
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(3, LoopType.Yoyo).OnComplete(MyCallBack);
    }


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            DOTween.Kill("ha");
        }
    }

    private void MyCallBack()
    {
        Debug.Log("哈哈哈");
    }

OnKill_被杀死的时候调用

  private void Start()
    {
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnComplete(MyCallBack).SetId("ha");
    }


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            DOTween.Kill("ha");//按下A会调用回调
        }
    }

    private void MyCallBack()
    {
        Debug.Log("哈哈哈");
    }

OnPlay_在开始播放的时候调用

在按下暂停然后再播放的时候会调用,第一次自动播放会调用

  private void Start()
    {
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnPlay(MyCallBack).SetId("ha");
    }


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            DOTween.Pause("ha");
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            DOTween.Play("ha");
        }
    }

    private void MyCallBack()
    {
        Debug.Log("哈哈哈");
    }

OnPause_在暂停的时候调用

播放的时候按下一次调用一次

 private void Start()
    {
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnPause(MyCallBackPause).SetId("ha");
    }


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            DOTween.Pause("ha");
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            DOTween.Play("ha");
        }
    }

    private void MyCallBack()
    {
        Debug.Log("哈哈哈");
    }

    private void MyCallBackPause()
    {
        Debug.Log("暂停的时候调用我");
    }

OnStepComplete_往返的时候调用

加入循环三次
0-1调用一次
1-2调用一次
2-3调用一次
Loop.Yoyo每次都会调用,0-0不调用

   private void Start()
    {
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnStepComplete(MyCallBackStepComplete).SetId("ha");
    }


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            DOTween.Pause("ha");
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            DOTween.Play("ha");
        }
    }


    private void MyCallBackStepComplete()
    {
        Debug.Log("哈哈哈");
    }

OnUpdate_在播放的时候就调用

如果暂停或者杀死就不会调用了。

 private void Start()
    {
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnUpdate(MyCallBackUpdate).SetId("ha");
    }


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            DOTween.Pause("ha");
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            DOTween.Play("ha");
        }
    }


    private void MyCallBackUpdate()
    {
        Debug.Log("哈哈哈");
    }

多个回调同时启用

private void Start()
{
    gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2)
        .SetLoops(-1, LoopType.Yoyo)
        .OnStart(MyCallBackStart)
        .OnUpdate(MyCallBackUpdate)
        .OnPlay(MyCallBackPlay)
        .OnKill(MyCallBackKill)
        .SetId("ha");
}


private void Update()
{
    if (Input.GetKeyDown(KeyCode.A))
    {
        DOTween.Pause("ha");
    }
    if (Input.GetKeyDown(KeyCode.D))
    {
        DOTween.Play("ha");
    }
}


private void MyCallBackPlay()
{
    Debug.Log("OnPlay");
}

private void MyCallBackStart()
{
    Debug.Log("开始");

}


private void MyCallBackUpdate()
{
    Debug.Log("哈哈哈");
}

private void MyCallBackKill()
{
    Debug.Log("杀死的时候调用我");

}

DoTwenn.To

using DG.Tweening;
using UnityEngine;

public class DotweenTest : MonoBehaviour
{
    void Start()
    {
        DOTween.To(value =>
        {
            //todo something
        }, 1, 30, 5);
    }

在这里插入图片描述

参数说明:1:开始值
30:结束值
5花费时间
todo something :在这段时间(5s内)需要做的事情。

延迟进行

延迟进行

DOVirtual.DelayedCall

          DOVirtual.DelayedCall(1.0f, () =>
          {
              Debug.Log("延迟一秒执行");
          });

1.0f 是延迟时间,后面跟上方法即可实现延迟一秒执行

DOTween.To

  DOTween.To(() => 0f, x => { }, 1f, 0.2f)
  .OnStart(() => { Debug.Log("开始"); })
  .OnUpdate(() => { Debug.Log("正在进行"); })
  .OnComplete(() => Debug.Log("Hello World"));

开始的时候打印开始
进行的时候打印正在进行
结束后打印helloworld。
时间是0.2f,

就这么多,太多了

请添加图片描述

### 如何在 DoTween设置 Yoyo 效果 在 DoTween 动画库中,`yoyo` 方法可以用来实现一种特殊的动画效果,即让动画在其完成位置和初始位置之间来回播放。这种效果类似于弹簧的弹回动作。 要启用 `yoyo` 效果,可以通过调用 `.SetLoops()` 并将其参数配置为奇数次循环来实现[^1]。具体来说,当设置了奇数次数的循环时,DoTween 会自动反转最后一次动画的方向,从而形成所谓的 “yoyo” 效果。以下是具体的代码示例: ```csharp using DG.Tweening; using UnityEngine; public class Example : MonoBehaviour { void Start() { // 让对象沿着 X 轴移动并返回原位 transform.DOMoveX(5f, 2f).SetLoops(2, LoopType.Yoyo); // 或者更复杂的例子:旋转和平移组合 DOTween.Sequence() .Append(transform.DORotate(new Vector3(0, 90, 0), 2)) .Join(transform.DOMoveZ(-5f, 2)) .SetLoops(3, LoopType.Yoyo) .Play(); } } ``` 上述代码展示了两种方式: - 单独使用 `DOMoveX` 来创建简单的水平运动,并通过 `SetLoops` 设置 yoyo 循环模式。 - 使用 `DOTween.Sequence` 创建复合动画序列,并同样应用 yoyo 模式。 需要注意的是,在 Unity 工程中集成 DoTween 插件之前,请先按照官方文档说明安装插件包[^2]。这通常涉及将下载好的资源拖放到项目文件夹内,并确保目标游戏对象已具备必要的组件支持(如 Rigidbody 或 Animator 组件)以便顺利执行动画逻辑。 #### 注意事项 为了使 yoyo 功能正常工作,还需要确认以下几点: - 确认版本兼容性;不同版本间 API 可能存在差异。 - 如果延迟启动动画,则需额外指定 `delay` 参数以调整时间间隔。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值