栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity-DOTween动画

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity-DOTween动画

使用总结

01 安装插

下载地址
http://dotween.demigiant.com/download.php




02 引入包

using DG.Tweening;

03 常用代码总结

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

public class Demo : MonoBehaviour
{
    public Button moveButton;
    public Button rotateButton;
    public Button scaleButton;
    public Button punchPositionButton;
    public Button punchRotateButton;
    public Button punchScaleButton;
    public Button shakeButton;
    public Button blendButton;
    public Button colorButton;
    public Button alpha0Button;
    public Button textOneByOneButton;
    public Button textOneByOneButton2;
    public Button cameraShakeButton;
    public Button sequenceButton;
    public Button setParaButton;
    public Button relativeChangeButton;
    public Button animationCallBackButton;
    public Button animationControlButton;
    public Button animationPauseButton;
    public Button animationResumeButton;
    public Button pathAnimationButton;
    public Image star;
    public Text text;
    public string textString = "";


    void Start()
    {
        moveButton.onClick.AddListener(() =>
            {
                print("移动");
                //第1个参数,移动到的目标位置。DOMove移动的坐标是世界坐标
                //第2个参数,动画的持续时间
                //star.transform.DOMove(new Vector2(-500, 0), 1);

                //第1个参数,移动到的目标位置
                //第2个参数,动画的持续时间。DOLocalMove移动的坐标是锚点坐标anchoredPosition(注意这里不是局部坐标localPosition)
                star.transform.DOLocalMove(new Vector2(-500, 0), 1);
            }
        );

        rotateButton.onClick.AddListener(() =>
        {
            print("旋转");
            //第1个参数,旋转的角度
            //第2个参数,动画的持续时间
            star.transform.DORotate(new Vector3(0, 0, 90), 1);
        });

        scaleButton.onClick.AddListener(() =>
        {
            print("缩放");
            //第1个参数,缩放的比例大小,默认比例是1
            //第2个参数,动画的持续时间
            star.transform.DOScale(new Vector3(3, 3, 3), 1);
        });

        punchPositionButton.onClick.AddListener(() =>
        {
            print("移动晃动");
            //第1个参数 移动的距离
            //第2个参数 表示动画持续时间
            //第3个参数 晃动次数

            //移动偏移晃动回到原来位置
            star.transform.DOPunchPosition(new Vector3(0, -20, 0), 1, 5);
        });

        punchRotateButton.onClick.AddListener(() =>
        {
            print("旋转晃动");
            //第1个参数 旋转的角度
            //第2个参数 表示动画持续时间
            //第3个参数 晃动次数

            //旋转晃动回到原来位置
            star.transform.DOPunchRotation(new Vector3(0, 0, 90), 1, 5);
        });


        punchScaleButton.onClick.AddListener(() =>
        {
            print("比例晃动");
            //第1个参数 晃动比例,这里即便设new Vector3(1, 1, 1),也会一定程度的晃动
            //第2个参数 表示动画持续时间
            //第3个参数 晃动次数

            //比例晃动回到原来位置
            star.transform.DOPunchScale(new Vector3(1, 1, 1), 1, 5);
        });



        shakeButton.onClick.AddListener(() =>
        {
            print("震动");
            //第1个参数 持续时间
            //第2个参数 震动幅度, 使用Vector3可以选择每个轴向不同的幅度
            //第3个参数 震动次数
            //第4个参数 改变震动方向的随机值(范围:0~180)
            //第5个参数 最后是否移动回原本位置
            star.transform.DOShakePosition(1, 10, 10, 50, true);
        });

        blendButton.onClick.AddListener(() =>
        {
            print("混合动画");

            //使用混合动画可以使两个动画在同一时间内同时进行。

            //混合动画,混合移动和旋转动画
            star.transform.DOBlendableLocalRotateBy(new Vector3(0, 0, 180), 1);

            //DOBlendableLocalMoveBy是锚点坐标,DOBlendableMoveBy是世界坐标
            star.transform.DOBlendableLocalMoveBy(new Vector2(-500, 0), 1);
            //star.transform.DOBlendableMoveBy(new Vector2(-500, 0), 1);
        });

        colorButton.onClick.AddListener(() =>
        {
            print("改变颜色");
            //修改颜色
            //第1个参数,颜色数值
            //第2个参数,时间长度,单位秒
            star.DOColor(new Color(255 / 255, 0 / 255, 0 / 255), 1);
        });

        alpha0Button.onClick.AddListener(() =>
        {
            print("透明度改变");
            //透明度改变
            //第1个参数,透明度,范围0-1
            //第2个参数,时间长度,单位秒
            star.DOFade(0, 1);
        });

        textOneByOneButton.onClick.AddListener(() =>
        {

            textString = "0123456789012345";
            print("文字逐个显示");
            //文字逐个显示
            //第1个参数,文字
            //第2个参数,时间长度,单位秒
            //SetEase(Ease.Linear)作用:显示更加顺滑
            text.DOText(textString, 1).SetEase(Ease.Linear);
        });


        //队列动画 - 重点使用
        sequenceButton.onClick.AddListener(() =>
        {
            print("队列动画");
            Sequence sequence = DOTween.Sequence();
            //第0秒插入一个动画
            sequence.Insert(0, star.transform.DOScale(2, 1));
            //第0秒插入一个动画
            sequence.Insert(0, star.transform.DORotate(new Vector3(0, 0, 90), 1));

            //第1秒插入一个动画
            sequence.Insert(1, star.transform.DOLocalMove(new Vector2(-500, 0), 2));
            //第1秒插入一个动画
            sequence.Insert(1, star.transform.DORotate(new Vector3(0, 0, 180), 2));

            sequence.InsertCallback(0.5f, () =>
            {
                print("第0.5秒触发事件");
            });

            sequence.InsertCallback(1.5f, () =>
            {
                print("第1.5秒触发事件");
            });

        });


        //设置常用参数
        setParaButton.onClick.AddListener(() =>
        {
            //模拟一个轮子在一直滚动
            //链式写法-通过参数控制
            //SetLoops(-1),-1代表无限循环
            //SetDelay(1)代表延迟一秒执行
            //SetRelative(true)代表动画变为增量动画
            //SetEase(Ease.Linear)表示动画会循环时,接缝会很顺滑
            star.transform.DORotate(new Vector3(0, 0, 360), 1).SetLoops(-1).SetDelay(1).SetRelative(true).SetEase(Ease.Linear);

        });

        //设置为增量动画
        relativeChangeButton.onClick.AddListener(() =>
        {
            //SetRelative参数
            //为true,传入的就是偏移量,即当前坐标 + 传入值 = 目标值
            //为falese,传入的就是目标值,即传入值 = 目标值
            //设置移动为增量移动
            star.transform.DOLocalMove(new Vector2(-50, 0), 1).SetRelative(true);
            //设置旋转的角度为增量旋转角度
            star.transform.DORotate(new Vector3(0, 0, 90), 1).SetRelative(true);

        });


        //调用完成回调
        //OnComplete 动画完成回调
        //OnStepComplete 完成单个循环周期时触发
        //OnStart 开始时
        animationCallBackButton.onClick.AddListener(() =>
        {
            star.transform.DOLocalMove(new Vector2(-50, 0), 1).OnComplete(() => { print("播放完成时"); });
        });


        //暂停继续重播控制,只能处理tranform.后面的API,像star.DOColor控制不了
        //1)播放,继续播放
        //transform.DOPlay();
        //2)暂停
        //transform.DOPause();
        //3)重播
        //transform.DORestart();
        animationControlButton.onClick.AddListener(() =>
        {
            star.transform.DORotate(new Vector3(0, 0, 360), 1).SetRelative(true).SetEase(Ease.Linear).OnComplete(() => { print("播放完成时"); star.transform.DORestart(); });
        });

        //暂停
        animationPauseButton.onClick.AddListener(() =>
        {
            star.transform.DOPause();
        });

        //继续播放
        animationResumeButton.onClick.AddListener(() =>
        {
            star.transform.DOPlay();
        });


        //轨迹弧线动画
        pathAnimationButton.onClick.AddListener(() =>
        {
            //设置的轨迹点数
            Vector3[] m_Paths = new Vector3[4];
            m_Paths[0] = new Vector3(0, -300, 0);
            m_Paths[1] = new Vector3(275, -250, 0);
            m_Paths[2] = new Vector3(530, -120, 0);
            m_Paths[3] = new Vector3(730, 75, 0);
            //第1个参数:轨迹点数组。
            //第2个参数:动画时间。
            //第3个参数:轨迹类型。PathType.CatmullRom代表曲线,PathType.CubicBezier贝塞尔曲线,PathType.Linear代表直线。经过实践,曲线使用CatmullRom比较好。
            //第4个参数:轨迹类型的具体类型。PathMode.Sidescroller2D代表2d弯曲路径,PathMode.Ignore代表忽略路径模式,PathMode.Full3D代表常规3d浏览模式。
            //PathMode.TopDown2D代表从上向下路径。经过实践,曲线使用PathMode.Sidescroller2D比较好
            //SetLookAt,朝向。范围0-1,0代表最后改朝向。1代表一开始就改朝向。0-1代表这个范围,一般设0.8比较好。
            //SetEase(Ease.Linear) 动画更顺滑。
            star.transform.DOLocalPath(m_Paths, 1f, PathType.CatmullRom, PathMode.Sidescroller2D).SetLookAt(0.8f).SetEase(Ease.Linear);
        });
    }


}


官方文档
http://dotween.demigiant.com/documentation.php

资料&教程

Dotween API详解及动效插件 免费
http://www.sikiedu.com/course/328/tasks
http://www.sikiedu.com/course/328/task/18838/show

课程相关资料

Dotween常用方法详解
https://blog.csdn.net/zcaixzy5211314/article/details/84886663

Dotween Path 路径动画使用方法详解
https://blog.csdn.net/zcaixzy5211314/article/details/84988535

MoveEffectTool工具Github地址
https://github.com/BlueMonk1107/MoveEffectTool

Dotween Ease效果演示地址
http://robertpenner.com/easing/easing_demo.html

Unity-Dotween插件 需要是收费会员 或收费$1
https://edu.51cto.com/course/22622.html

Unity专题-动画插件DOTween $12
https://ke.qq.com/course/270869

DOTween插件API详解及案例实现 $25
https://ke.qq.com/course/379326

UnityDotween动画 $4.8
https://edu.51cto.com/course/23011.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901355.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号