DOTween官方文档

修改3D物体位置

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening; // 在使用DOTween需引入对应的命名空间:

public class GetStart : MonoBehaviour
{
    public Vector3 myValue = new Vector3(10, 5, 0);
    public Transform cube_;

    void Start()
    {
        //  DOTween.To():让当前值变为另一个值
        // 第一个参数:返回要修改的值,第二个参数:把DOteen计算好的值赋值给myValue,第三个参数:变化的目标值, 第四个:变化的时间,2s
        DOTween.To(() => myValue, x => myValue = x, new Vector3(5, 0, 0), 2);
    }
    
    void Update()
    {
        cube_.position = myValue;
    }
}

unity animator 重复播放当前动画 unity设置动画循环播放_Text

修改2D物体位置

public class GetStart : MonoBehaviour
{
    public Vector3 myValue = new Vector3(10, 5, 0);
    public RectTransform image_; // 2D物体是RectTransform,3D物体是Transform

    void Start()
    {
        DOTween.To(() => myValue, x => myValue = x, new Vector3(0, 0, 0), 5);

    }

    // Update is called once per frame
    void Update()
    {
        image_.localPosition = myValue; // 这里使用image_.Position的话改变的是世界坐标系, image_.localPosition是局部坐标系

    }
}

unity animator 重复播放当前动画 unity设置动画循环播放_世界坐标系_02

将数值由10变为0

public class GetStart : MonoBehaviour
{
    public float myValue2 = 10;

    void Start()
    {
        DOTween.To(() => myValue2, x => myValue2 = x, 0, 5);
    }
}

点击按钮让物体移动到视野中央,再点击则移出视野

public class GetStart : MonoBehaviour
{
    public RectTransform image_;
    private bool isIn = false;

    public void Onclick() {
        // 第一个参数:目标位置 第二个参数:动画时间, 2s
        //image_.DOMove(new Vector3(0,0,0),2);  // 点击按钮移动到new Vector3(0,0,0)的位置,世界坐标系
        // image_.DOLocalMove(new Vector3(0, 0, 0), 2);  // 局部坐标系
        if (isIn == false)
        {
            image_.DOLocalMove(new Vector3(0, 0, 0), 2);  // 执行完就销毁
            isIn = true;
        }
        else {
            image_.DOLocalMove(new Vector3(578, 0, 0), 2);  // 执行完就销毁
            isIn = false;
        }
    }
}

优化点击按钮让物体移入移出

public class GetStart : MonoBehaviour
{
    public RectTransform image_;
    private bool isIn = false;

    private void Start()
    {
        Tweener tweener = image_.DOLocalMove(new Vector3(0, 0, 0), 2);  // Tweener保存动画的信息,每次DO都会创建一个Tweener对象,默认动画播放完就会销毁
        tweener.SetAutoKill(false); // 不让动画自动销毁
        tweener.Pause(); // 先不执行动画
    }
    
    public void Onclick() {
        // 第一个参数:目标位置 第二个参数:动画时间, 2s
        //image_.DOMove(new Vector3(0,0,0),2);  // 点击按钮移动到new Vector3(0,0,0)的位置,世界坐标系
        if (isIn == false)
        {
            image_.DOPlayForward(); // 前放
            isIn = true;
        }
        else {
            image_.DOPlayBackwards(); // 倒放
            isIn = false;
        }
    }
}

From Tween的使用

void Start()
    {
        // 沿x轴移动到x=5的位置,用时1s。
        transform.DOMoveX(5, 1);

        // 沿x轴移动到x=5的位置,再回到原位置,用时1s。
        transform.DOMoveX(5, 1).From();
        
        // 加上true是相对位置,如果cube原x坐标为1,那么他就是运动到x=6的位置,再回到x=1的位置
        transform.DOMoveX(5, 3).From(true); 
    }

动画属性的设置(动画模式、循环、事件函数)

public class Domove2 : MonoBehaviour
{
    void Start()
    {
        Tweener tweener = transform.DOLocalMoveX(0, 2);
        tweener.SetEase(Ease.Linear);  // Ease.InCubic 设置动画的模式,先快后慢、匀速、弹跳等等。
        tweener.SetLoops(3); // 循环播放3次
        tweener.OnComplete(OntweenerCompleteFn); // 当动画播放完的时候,调用OntweenerCompleteFn方法
    }


    void OntweenerCompleteFn() {
        print("我播放完了");
    }
}

动画的生命周期与生命周期函数

unity animator 重复播放当前动画 unity设置动画循环播放_System_03

对话框文字动画

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class MyText : MonoBehaviour
{
    private Text text;

    void Start()
    {
        text = this.GetComponent<Text>();
        text.DOText("我是游戏提示,我是游戏提示,我是游戏提示", 2);
    }

}

unity animator 重复播放当前动画 unity设置动画循环播放_System_04

屏幕震动(相机位移)

public class ShakeScene : MonoBehaviour
{
    void Start()
    {
        transform.DOShakePosition(1);  // 屏幕震动的1s

        transform.DOShakePosition(1, new Vector3(3,3,0));  // 屏幕震动的1s,震动幅度为向x移动3,y移动3
    }
}

unity animator 重复播放当前动画 unity设置动画循环播放_unity_05

颜色透明度动画

public class MyText : MonoBehaviour
{
    private Text text;

    void Start()
    {
        text = this.GetComponent<Text>();
        text.DOColor(Color.green, 2); // 2秒时间,让text的颜色由黑色渐变为绿色
        text.DOFade(1, 3); // 3s时间,让text的颜色由透明转为不透明
    }

}

unity animator 重复播放当前动画 unity设置动画循环播放_世界坐标系_06

动画的组件可视化创建方式

unity animator 重复播放当前动画 unity设置动画循环播放_世界坐标系_07


动画组件的代码控制:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class DoteenAnimation : MonoBehaviour
{
    private DOTweenAnimation tweenAnimation;
    private bool isIn;

    void Start()
    {
        tweenAnimation = GetComponent<DOTweenAnimation>();
        //tweenAnimation.DOPlay();
    }

    public void OnClick() {
        if (isIn == true)
        {
            tweenAnimation.DOPlayBackwards();
            isIn = false;
        }
        else {
            tweenAnimation.DOPlayForward();
            isIn = true;
        }
    }
}