zoukankan      html  css  js  c++  java
  • DoTween动画插件学习

    一.简单的变量插值运算

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using DG.Tweening;
    
    public class GetStart : MonoBehaviour
    {
        public Vector3 myValue = Vector3.zero;
        void Start()
        {
            //对变量做动画,通过插值去修改值的变化
            //变量由0 0 0变化到10 10 10,变化曲线一阶导为正,二阶导为负(即一直增大,增大的速度先快后慢)
            //参数:返回myValue值,将x(插值运算的中间值)赋值给myValue,插值运算的最终结果,插值运算的时间
            DOTween.To(() => myValue,x => myValue = x, new Vector3(10, 10, 10), 2);
        }
    
    }

    导包using DG.Tweening;,使用DOTween.To方法进行动画的插值运算

    二.简单的动画效果

        private void Update()
        {
            //每一帧的立方体的位置和插值运算的结果保持一致
            cubeTransform.position = myValue;
        }

    公开一个transform,新建一个立方体拖动到脚本上赋值,在update函数中使每一帧的立方体的位置和插值运算结果保持一致

    三.动画的快捷播放方式

        public RectTransform panelTransform;
        public bool isIn = false;
        public void OnClick()
        {
            if (!isIn)
            {
                //对transform的拓展方法,实现物体的移动
                //参数:移动的目标位置,移动的时间
                //panelTransform.DOMove(Vector3.zero, 1);
                Tweener tweener = panelTransform.DOLocalMove(Vector3.zero, 1f);//默认动画会被销毁
                //动画的对象为Tweener类型的对象,接收这个对象,并将自动销毁的属性设置为false
                tweener.SetAutoKill(false);
    
                isIn = true;
            }
            else
            {
                //动画未销毁则可以倒放动画
                panelTransform.DOPlayBackwards();
    
                isIn = false;
            }
                
        }

    通过拓展Unity原来API中的类的方法实现动画的快捷播放,这里将panel从屏幕外移动到屏幕中央,两个动画播放方法分别对应世界坐标和本地坐标

        public RectTransform panelTransform;
        public bool isIn = false;
        private void Start()
        {
            //在start里创建并保存一个动画
            Tweener tweener = panelTransform.DOLocalMove(Vector3.zero, 1f);//默认动画会被销毁
            tweener.SetAutoKill(false);
            //暂停动画的播放
            tweener.Pause();
        }
        public void OnClick()
        {
            if (!isIn)
            {
                //动画播放,DOPlay方法只会播放一次
                //panelTransform.DOPlay();
                //动画前放,DOPlayForward方法可以多次播放和回放动画
                panelTransform.DOPlayForward();
                isIn = true;
            }
            else
            {
                //倒放动画,DOPlayBackwards方法和DOPlayForward方法是一对方法
                panelTransform.DOPlayBackwards();
    
                isIn = false;
            }
                
        }

    可以现在start中创建好动画,再在合适的时候进行任意次的播放和倒放

    四.from方法

    通过在动画方法后点上from方法可以实现从目标位置到当前位置播放动画

        public RectTransform panelTransform;
    
        public void OnClick()
        {
            //不加from表示从当前位置运动到up位置,加上from表示从up位置运动到当前位置
            //panelTransform.DOLocalMove(Vector3.up, 4).From();   
            //可以在from中添加一个bool值的参数,表示这个运动目标位置是否是相对位置,不填写默认为false也就是绝对位置
            panelTransform.DOLocalMove(Vector3.up, 4).From(true);
        }

    五.动画的一些设置

    动画创建后返回值为tweener对象,调整这个对象的参数即可对动画进行设置(前面已经设置过动画是否自动销毁)

            //设置动画曲线,Ease是枚举类型,枚举了内置的各种动画曲线
            tweener.SetEase(Ease.InSine); 
            //设置动画播放的次数
            tweener.SetLoops(2);
            //设置动画完成后调用的方法,OnTweenComplete是动画结束后调用的方法的方法名,不用引号
            tweener.OnComplete(OnTweenComplete);

    六.可视化动画组件DOTween Animation

     可以方便地管理动画类型、动画曲线和生命周期(Events)等

    七.可视化路径编辑器组件DOTween Path

     设置路径,控制游戏对象按照路径运动

  • 相关阅读:
    c++ Knight Moves 超级升级版
    百度招聘彩蛋
    C++ 八数码问题宽搜
    c++ 动态规划(数塔)
    c++ 深度优先搜索(迷宫)
    c++ 宽搜(倒水)
    c++ matrix逆时针螺旋
    c++ 基数排序
    c++ 二分答案(解方程)
    c++ 二分答案(数组查找)
  • 原文地址:https://www.cnblogs.com/movin2333/p/14111500.html
Copyright © 2011-2022 走看看