zoukankan      html  css  js  c++  java
  • Unity中DoTween的使用

    在Unity手游开发中,经常用到插值运算,我们可以使用Mathf.Lerp自行去实现效果,但是使用插件提高了我们的开发效率,这里归结一下DoTween的基本使用方式以及效果说明:

    直接代码:

      1 using DG.Tweening;
      2 using System.Collections;
      3 using System.Collections.Generic;
      4 using UnityEngine;
      5 using UnityEngine.UI;
      6 
      7 public class OwnTextDoTween : MonoBehaviour {
      8     //DoTween.To();
      9     public int value;
     10     public GameObject cube;
     11     Vector3 myValue = new Vector3(0, 0, 0);
     12 
     13     //打字机
     14     //text.DoText()
     15     public Text text;
     16 
     17     //屏幕震动效果
     18     // mainCamera.DOShakePosition()
     19     public Camera mainCamera;
     20 
     21     //冷却Image
     22     public Image image;
     23 
     24     public float start = 1;//fillAmount最大值
     25     public float end = 0;//fillAmount最小值
     26 
     27     void Start()
     28     {
     29         #region 1. DOTween.To() 对变量做一个动画,通过插值的方式修改一个值的变化
     30         ///对变量做一个动画,通过插值的方式修改一个值的变化
     31         //A.    用两秒的时间从0变化到50
     32 
     33         //()=> value,表示返回值为value,x=>value=x,表示将系统计算好的x值(当前值到目标值的插值)赋给value,50,表示达到的目标值,5表示所需时间
     34 
     35         //  value = 0;
     36         //  DOTween.To(() => value, x => value =x, 50,5);
     37 
     38 
     39         //B.     控制Cube或UI面板的动画
     40 
     41         ///1)、将脚本挂在Cube上,并且在Update方法中把myValue的值赋给当前位置,这样便实现了Cube从当前位置移动到了目标位置 
     42         ///用两秒的时间从0,0,0变化到10,10,10
     43         ///()=> myValue,表示返回值为myValue,x=>myValue=x,表示将系统计算好的x值(当前值到目标值的插值)赋给myValue,new Vector3(10,10,10),表示达到的目标值,5表示所需时间
     44 
     45         // DOTween.To(() => myValue, x => myValue = x, new Vector3(10, 10, 10), 5);
     46 
     47 
     48         #endregion
     49 
     50         #region 5.  FromTween:表示让物体从目标位置移动到当前位置,即等同于播放反向的移动动画
     51 
     52         //1.     DOMoveX()、DOMoveY()、DOMoveZ()
     53 
     54         ///A. 如果只是让物体的单个坐标移动,可直接用DOMoveX()、DOMoveY()、DOMoveZ()方法控制移动动画,参数为(目标位置,所需时间)
     55         // Tweener tweer =cube.transform.DOMoveX(10, 3);
     56 
     57         ///B. DoTween中任何调用动画的方法后面都可以添加From(),表示从目标位置移动到当前位置
     58         // tweer.From();
     59 
     60         ///C. From(true)表示目标坐标等于当前坐标加上当前目标坐标,如果物体当前坐标为2,那么这行代码表示从目标位置(10+ 2),经过1秒,移动到当前位置(2)
     61         /// tweer.From(true);
     62 
     63         //2.  DOLocalMoveX()、DOLocalMoveY()、DOLocalMoveZ()
     64 
     65         ///  表示局部坐标的位移动画方法。DoTween中所有对动画的设置都是通过对象Tweener来完成的
     66 
     67         // Tweener tweener = cube.transform.DOLocalMoveX(10, 2f);
     68 
     69 
     70 
     71         #endregion
     72 
     73         #region 6.SetEase() 设置缓冲类型  通过次方法来设置动画的曲线,曲线动画效果很多,在此仅做三个案例,其他的可以在系统给的枚举类型中找
     74 
     75         // Tweener teweer = cube.transform.DOMoveX(10, 2);
     76         //A.Ease.InBack
     77         /// 表示物体先向后一点,再向前播放(相当于蓄力起跑)
     78         // teweer.SetEase(Ease.InBack);
     79 
     80         //B.Ease.InBounce
     81 
     82         ///相当于一个多次蓄力进入的效果
     83         // teweer.SetEase(Ease.InBounce);
     84 
     85         //C.Ease.OutBounce
     86 
     87         /// 相当于一个落地之后的弹跳效果(惯性撞击反弹(物理属性))
     88         // teweer.SetEase(Ease.OutBounce);
     89 
     90 
     91 
     92         #endregion
     93 
     94         #region 7.SetLoops()可以通过此方法设置动画循环的次数
     95         // Tweener twer = cube.transform.DOMoveX(10, 3);
     96 
     97         //表示动画的循环次数
     98         //twer.SetLoops(2);//循环两次
     99 
    100 
    101 
    102         #endregion
    103 
    104         #region 8.OnComplete()表示事件函数,当前动画播放完后调用另一个方法,参数为需要调用的方法
    105         //Tweener twer = cube.transform.DOMoveX(10, 3);//DoTween中所有对动画的设置都是通过对象Tweener来完成的
    106         //twer.SetEase(Ease.OutBounce);//相当于一个落地之后弹跳的效果
    107         //twer.SetLoops(2);//表示动画的循环次数
    108         //twer.OnComplete(Onclick);//表示当前动画播放完之后调用的事件,相当于一个注册方法,参数为需要注册的方法即为Onclick
    109         #endregion
    110 
    111         #region 9. SetId 设置ID 可以只用 int、string、object等类型的值
    112         //Tweener tweener = cube.transform.DOScale(2, 2);
    113         //tweener.OnComplete(() =>
    114         //{
    115         //    tweener.Restart();//重复播放此动画
    116         //});
    117         //tweener.SetId(1);
    118 
    119         #endregion
    120 
    121         #region 10. SetAutoKill  设置自动销毁
    122         //  Tweener tweener = cube.transform.DOScale(2, 2);
    123         // tweener.SetAutoKill();//执行完就销毁
    124         #endregion
    125 
    126         #region  11.Sequence 队列
    127         //在实际的需求中,一个动画一般都包含对多个物体的操作,那么如何使用DoTween制作这种动画呢?对于一些简单的动画,直接顺序执行多个DoTween语句即可;对于一些复杂的动画,诸如包含延时、动画事件回调、播放音效等的动画,可以利用DoTween的动画队列完成这些操作。
    128         //Sequence sequence = DOTween.Sequence();//创建一个动画(Tweener)队列
    129         //sequence.Append(cube.transform.DOMoveX(6, 3).SetRelative().SetEase(Ease.OutBounce));
    130         //sequence.Append(cube.transform.DOScale(3,3));
    131         //sequence.Append(cube.transform.DOShakeScale(5, 1, 10, 90));//果冻颤动的效果
    132         #endregion
    133 
    134         #region 12.设置冷却转圈的 Image
    135         ///设置冷却转圈 附带设置 转一圈(回调方法直接实现,不用调用其他的方法)
    136        // image.DOFillAmount(0, 5).SetEase(Ease.Linear).SetLoops(1, LoopType.Yoyo);//从当前到0,时间为5秒
    137 
    138         #endregion
    139 
    140 
    141         #region
    142         #endregion
    143         #region
    144         #endregion
    145         #region
    146         #endregion
    147 
    148 
    149     }
    150     /// <summary>
    151     /// OnComplete()事件函数执行完所有动画后调用的方法
    152     /// </summary>
    153     public void Onclick()
    154     {
    155         Debug.Log("OnComplete()表示事件函数,当前动画播放完后调用另一个方法,我是参数为需要调用的方法");
    156     }
    157 
    158 
    159     void Update()
    160     {
    161 
    162         #region 1. DOTween.To() 对变量做一个动画,通过插值的方式修改一个值的变化(updata中赋值show变化)
    163         ///对变量做一个动画,通过插值的方式修改一个值的变化(updata中赋值show变化)
    164         //A.  text.text = value.ToString();
    165 
    166 
    167         ///B.1)、将脚本挂在Cube上,并且在Update方法中把myValue的值赋给当前位置,这样便实现了Cube从当前位置移动到了目标位置
    168         // cube.transform.localPosition = myValue;
    169 
    170 
    171         #endregion
    172 
    173         #region 2. 对话框文字动画,该方法显示打字机效果
    174         ///DOText()
    175         ///对话框文字动画,该方法显示打字机效果
    176         if (Input.GetKeyDown(KeyCode.A))
    177         {
    178             text.DOText("你好我好他好大家好大大所多所多", 10);//打字机效果
    179         }
    180         #endregion
    181 
    182         #region 3. 屏幕震动效果,原理是让摄像机进行随机方向的位移,产生震动的假象
    183         ///DOShakePosition()
    184         /// 屏幕震动效果,原理是让摄像机进行随机方向的位移,产生震动的假象
    185         if (Input.GetKeyDown(KeyCode.B))
    186         {
    187             mainCamera.DOShakePosition(0.8f);//表示震动时间是0.8秒,震动方向随机
    188             mainCamera.DOShakePosition(0.8f, new Vector3(1, 1, 0));//表示震动时间是0.8秒,震动方向为x和y方向,震动强度为1
    189         }
    190         #endregion
    191 
    192         #region 4. 颜色渐变和透明度渐变动画
    193         /// DOColor()、DOFade()
    194         ///颜色渐变和透明度渐变动画
    195         if (Input.GetKeyDown(KeyCode.C))
    196         {
    197             text.DOText("你好拿的数据大发发附件", 8);//打字机
    198             text.DOColor(Color.blue, 2);//渐变颜色动画
    199             text.DOFade(0, 5);//渐变透明度动画参数为(透明度,渐变时间),其中0为不透明,1为完全透明
    200         }
    201         #endregion
    202 
    203     }
    204 
    205     #region 小案例
    206     //private Button myButton;
    207     //private RectTransform taskPanelTransform;//UGUI是通过RectTransform组件来控制移动属性的
    208     //private bool isShow = false;
    209 
    210     //void Start()
    211     //{
    212     //    myButton = transform.Find("Button").GetComponent<Button>();
    213     //    taskPanelTransform = transform.Find("Panel").GetComponent<RectTransform>();
    214     //    myButton.onClick.AddListener(OnClickBtn);//UGUI中监听按钮的方法
    215     //    Tweener tweener = taskPanelTransform.DOLocalMove(new Vector3(0, 0, 0), 1);//修改的是局部坐标,默认动画完后会被销毁
    216     //     //Tweener对象保存这个动画的信息,每次调用do类型的方法都会调用一个tweener对象,这个对象使用DoTween来管理
    217     //    tweener.SetAutoKill(false);//把SetAutoKill自动销毁设置为false
    218     //    tweener.Pause();//让动画在开始时暂停
    219     //}
    220     //public void OnClickBtn()
    221     //{
    222     //    //   taskPanelTransform.DOMove(new Vector3(0, 0, 0),1);//DOMove()方法是Dotween扩展的方法,表示经过1秒运动到0,0,0的位置(修改的是世界坐标)
    223     //    if (isShow == false)
    224     //    {
    225     //       // taskPanelTransform.DOPlay();//让动画只播放一次
    226     //        taskPanelTransform.DOPlayForward();//让动画向前播放
    227     //        isShow = true;
    228     //    }
    229     //    else
    230     //    {
    231     //        taskPanelTransform.DOPlayBackwards();//倒放动画的方法
    232     //        isShow = false;
    233     //    }
    234     //}
    235     #endregion
    236 }

    以上就是一些基本使用方式,这是个局部,后续有机会再更新!!!

    渴望交流!!!

  • 相关阅读:
    Spark架构分析
    mr运行出错,解决办法
    hbase调优
    虚拟机长时间不关造成的问题
    crontab 使用
    虚拟机克隆网络问题的解决
    ligerui.grid.extend.rowSpan
    64位下安装Scrapy 报错 "could not find openssl.exe" 的解决方法。
    EventBus 事件总线之我的理解
    MongoDB 系列(二) C# 内嵌元素操作 聚合使用
  • 原文地址:https://www.cnblogs.com/answer-yj/p/10885936.html
Copyright © 2011-2022 走看看