Dotween插件学习笔记

1、Dotween API

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
/*
 * Unity Dotween插件的学习脚本
 * 2020/3/16
 */
public class DotweenLearn01 : MonoBehaviour
{
    public GameObject target;
    public Gradient gradient;
    // Start is called before the first frame update
    void Start()
    {
        transform.DOMove(Vector3.one, 2);
        //transform.DOLocalMove(new Vector3(2, 2, 2), 2);

        transform.DORotate(Vector3.one, 2);
        //transform.DOLocalRotate(new Vector3(0, 90, 0), 2);
        //transform.DOLookAt(target.transform.position, 2);

        transform.DOScale(Vector3.one * 2f, 2);

        //Punch函数   相当于拍一个球,球来回弹的效果
        //参数1:方向   参数2:持续时间   参数3:震动值   参数4:0-1之间,越大向下移动的范围越大
        transform.DOPunchPosition(new Vector3(0, 1, 0), 2, 5, 0.1f);
        //transform.DOPunchRotation(new Vector3(45, 0, 0), 2, 5, 0.1f);
        //transform.DOPunchScale(new Vector3(2, 2, 2), 2, 5, 0.1f);

        //Shake函数
        //参数:持续时间   方向   振动值   随机值   
        transform.DOShakePosition(2, Vector3.one, 10, 90);
        //transform.DOShakeRotation(2, new Vector3(45, 0, 0), 10, 90);
        //transform.DOShakeScale(2, new Vector3(2, 2, 2), 10, 90);

        //Blend   
        //特性一:混合,将多个相同方法的结果合到一起;不使用Blend的情况下多个相同方法只会执行最新的一个
        //特性二:增量动画,以移动为例,不使用Blend,DoMove是移动到目标点;使用Blend,是在当前结果的基础上往上加
        //以移动为例
        transform.DOBlendableMoveBy(Vector3.one, 2);
        transform.DOBlendableMoveBy(Vector3.one*2, 2);

        //Material   修改材质的shader如下图
        Material material = GetComponent<MeshRenderer>().material;
        material.DOColor(Color.green,"_TintColor", 2);
        material.DOFade(0,"_TintColor",2);   //材质改变透明度动画   最终值   持续时间
        //material.DOGradientColor(gradient, "_TintColor", 2);
        //材质的颜色混合   物体会变成混合后的颜色
        material.DOBlendableColor(Color.red,"_TintColor", 2);
        material.DOBlendableColor(Color.yellow, "_TintColor", 2);
    }
}

修改材质的shader如下图

2、相机动画效果以及Text动态输出

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;
/*
 * Unity Dotween插件的学习脚本
 * 2020/3/22
 */
public class DotweenLearn02 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //Camera
        Camera camera = GetComponent<Camera>();
        camera.DOAspect(0.5f, 2);   //改变宽高比
        camera.DOColor(Color.green, 2);   //改变颜色
        camera.DONearClipPlane(1.5f,2);   //近切面
        camera.DOFarClipPlane(5000,2);   //远切面
        camera.DOFieldOfView(30, 2);   //放大物体效果

        //相机分屏效果
        //camera.DOPixelRect(new Rect(0, 0, 540, 356), 2);
        //camera.DORect(new Rect(0, 0, 540, 356), 2);

        //相机晃动效果
        camera.DOShakePosition(2,3,10,90);

        //动态输出Text   脚本挂载在Text上
        Text text = GetComponent<Text>();
        //text.DOText("ghgkkkhjkgfdhlhslshlsdkfdsnfdsnslflsdhfsdfnroouhwoiwepjfsdklfnsdfnweijipwjrwjfksldf" +
        //    "dlksfndslnfsdlfjiejelfnsldsnflksd.", 20);   //由快到慢
        text.DOText("hadhaskasnca", 5).SetEase(Ease.Linear);   //匀速
    }
}

3、对列解析以及参数设置

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
/*
 * Unity Dotween插件的学习脚本
 * 2020/3/26
 * 队列的学习
 */
public class DotweenLearn03 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //队列
        Sequence sequence = DOTween.Sequence();   //Sequence   队列类
        //队列的Append方法   从上到下依次添加动画
        sequence.Append(transform.DOMove(Vector3.one, 2));  //4-6秒
        sequence.Join(transform.DORotate(Vector3.one, 2));  //加入一个方法
        sequence.AppendInterval(2);   //延迟2秒执行下一个队列的方法   6-8秒
        sequence.Append(transform.DOMove(new Vector3(3, 0, 0),2));   //8-10秒
        //插入动画
        //sequence.Insert(2,transform.DOMove(new Vector3(3, 0, 0), 2));   //2秒处插入动画
        //Prepend  预添加方法   括号内方法从下往上执行
        sequence.Prepend(transform.DOScale(Vector3.one * 2f, 2));   //2-4秒
        sequence.Prepend(transform.DOScale(Vector3.one * 0.5f, 2));   //0-2秒
        //回调函数用法
        sequence.InsertCallback(3, InsCB);   //3秒处调用
        //sequence.AppendCallback(InsCB);
        //sequence.PrependCallback(InsCB);
        //参数设置
        transform.DOMove(Vector3.one, 2).SetLoops(-1, LoopType.Restart);   //参数为1时,不循环,参数为-1时为循环

        //From补间动画   From可以传进参数true,与不传参数的效果是不一样的
        //from   使(0,0,0)由终点变为起始点,即反方向运动
        transform.DOMove(new Vector3(0,0,0), 2).From();

        //SetDelay   动画延时
        transform.DOMove(new Vector3(3, 3, 3), 2).SetDelay(3);   //动画延时3秒

        //SetSpeedBased   将以时间为基准的动画改为以速度为基准的动画,即2秒完成改为了2m/s完成
        transform.DOMove(new Vector3(3, 3, 3), 2).SetSpeedBased();

        //SetId   设置ID  已经缓存的动画可通过ID调用,节省性能
        transform.DOMove(new Vector3(3, 3, 3), 2).SetId("ID");
        DOTween.Play("ID");

        //SetRelative  设置动画为增量动画  这里以当前位置为起点,以(0, 0, -5)为单位向量运动
        transform.DOMove(new Vector3(0, 0, -5), 2).SetRelative(true);

        //设置帧函数类型
        transform.DOMove(Vector3.one, 2).SetUpdate(UpdateType.Normal,true);
    }
    private void InsCB()
    {
        print("sss");
    }
}

4、运动曲线

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
/*
 * Unity Dotween插件的学习脚本
 * 2020/3/27
 * 运动曲线
 */
public class DotweenLearn04 : MonoBehaviour
{
    public AnimationCurve AniCur;
    // Start is called before the first frame update
    void Start()
    {
        //Flase曲线
        //transform.DOMove(Vector3.one * 2, 2).SetEase(Ease.Flash, 10, -1);
        //AnimationCurve设置运动曲线
        transform.DOMove(Vector3.one * 2, 2).SetEase(AniCur);
    }
}

5、控制方法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
/*
 * Unity Dotween插件的学习脚本
 * 2020/3/27
 */
public class DotweenLearn05 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //回调函数
        transform.DOMove(Vector3.one * 2, 2).OnPlay(() => { print("动画播放"); });
        transform.DOMove(Vector3.one * 2, 2).OnComplete(() => { print("动画完成"); });
        transform.DOMove(Vector3.one * 2, 2).OnKill(() => { print("动画被杀死"); });
        transform.DOMove(Vector3.one * 2, 2).OnPause(() => { print("动画被暂停"); });
        //......等等

        //控制方法
        transform.DOPause();   //动画暂停
        transform.DOPlay();   //动画播放
        transform.DORestart();   //动画重播
        transform.DORewind();   //动画倒播
        transform.DOKill();   //动画被杀死
        transform.DOFlip();   //反转动画补间
        transform.DOGoto(1,true);   //动画跳转到1秒
        transform.DOFlip();   //反转补间
        transform.DOFlip();   //反转补间
        transform.DOFlip();   //反转补间
        transform.DOPlayBackwards();   //将动画反向播放
        transform.DOTogglePause();   //播放状态下会暂停,暂停状态下会播放
    }
}

6、获取数据的方法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
/*
 * Unity Dotween插件的学习脚本
 * 2020/3/27
 * 获取数据的方法
 */
public class DotweenLearn06 : MonoBehaviour
{
    private Tweener tweener;
    // Start is called before the first frame update
    void Start()
    {
        //1、类方法
        var List = DOTween.PlayingTweens();   //获取播放的动画
        DOTween.TweensById("ID");   //获取id为ID的动画
        //其他的类似

        //2、获取动画的执行时间
        tweener = transform.DOMove(Vector3.up, 2);
        print(tweener.fullPosition);
        tweener.fullPosition = 0;   //修改动画执行时间为0

        //3、获取时间数据
        print(tweener.Delay());   //获取延迟时间
        print(tweener.Duration());   //获取持续时间
        tweener.SetLoops(3);   //循环3次
        //已经播放的时间
        print(tweener.Elapsed(true));   //传入true,包含循环时间;传入false,不包含循环时间
        print(tweener.ElapsedDirectionalPercentage());   //获取进度的百分比
        //4、判断动画状态的方法
        print(tweener.IsPlaying());   //动画是否播放
        print(tweener.IsBackwards());   //是否反向
        //其他的类似

        //5、携程-指定循环次数等方法
        StartCoroutine(Wait());

    }
    private IEnumerator Wait()
    {
        yield return tweener.WaitForCompletion();   //等待动画播放完成,执行下面逻辑
        print("动画已播放完毕。");
        yield return tweener.WaitForElapsedLoops(2);   //指定循环次数2次,执行下面逻辑
        yield return tweener.WaitForPosition(1.5f);   //动画播放到1.5秒的位置,执行下面逻辑
        //等等
    }
}

7、路径动画

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using DG.Tweening;
/*
 * Unity Dotween插件的学习脚本
 * 2020/3/27
 * 路径动画
 */
public class DotweenLearn07 : MonoBehaviour
{
    public Transform[] pointPosionList;
    private Vector3[] posions;
    // Start is called before the first frame update
    void Start()
    {
        posions = new Vector3[pointPosionList.Length];
        for (int i = 0; i < pointPosionList.Length; i++)
        {
            posions[i] = pointPosionList[i].position;
            print(posions[i]);
        }
        //SetOptions设置为true为封闭运动,后面为Y轴锁定
        //SetLookAt后面数值决定运动朝向,0和1为前和后,0.5差不多与路径垂直
        transform.DOPath(posions, 5, PathType.CatmullRom, PathMode.Full3D, 10, Color.green)
            .SetOptions(true, AxisConstraint.Y)
            .SetLookAt(0.5f);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值