Unity中DoTween的使用

博客介绍了在Unity手游开发中,插值运算可使用Mathf.Lerp实现效果,但使用插件能提高开发效率。归结了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 }

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

渴望交流!!!

转载于:https://www.cnblogs.com/answer-yj/p/10885936.html

DOTween是一种快速,高效,完全类型安全的面向对象的动画引擎的团结,以优化C#用户,免费和开源,用吨的先进功能。 DOTweenUnity版本2018至3.5兼容。 适用于: Win,Mac,Linux,Unity WebPlayer,WebGL,iOS,Android, Windows Phone,Windows Store,PS Vita(PSM),PS4,Xbox One,Nintendo Switch +更多(没有测试其他平台但它应该工作除了使用Flash导出以外的所有地方。 特征 速度和效率 不仅非常快,而且非常高效:所有内容都被缓存并重复使用,以避免无用的GC分配。 智能感知和类型安全 所有代码都包含XML注释,并组织起来以充分利用IntelliSense。此外,一切都是类型安全的:任何地方都没有字符串。 快捷键 直接扩展普通对象的快捷方式扩展: // Move a transform to position 1,2,3 in 1 second transform.DOMove(new Vector3(1,2,3), 1); // Scale the Y of a transform to 3 in 1 second transform.DOScaleY(3, 1); // Pause a transform's tween transform.DOPause(); 非常准确 时间以非常精确的方式计算。这意味着每个1000秒的循环将会以1000秒的单圈循环播放。 逻辑和易于使用的API 提高效率,直观性和易用性的API。 动画(几乎) DOTween可以动画每个数字值,也可以是一些非数字值。它甚至可以对字符串进行动画处理,支持富文本。 捕捉,轴约束和其他选项 选择有关如何补间值的其他选项,例如捕捉(捕捉值到整数)或轴约束。 完全控制 播放,暂停,倒带,重新启动,完成,转到和吨其他有用的方法来控制你的补间。 分组 将补间组合到序列中以创建复杂的动画(不需要在一个,呃,序列中:它们也可以相互重叠)。 可混合的补间 由于强大的DOBlendable快捷方式,一些补间可以实时混合。 路径 沿线性和弯曲路径设置动画,并为旅行社的方向提供额外选项。 播放时更改值和持续时间 即使在播放时,也可以随时更改补间的开始/结束值或持续时间。 安全模式 激活可选的安全模式,让DOTween处理意外事件,例如播放时销毁的补间目标。 协程的产量 在协同程序中使用的各种“WaitFor ...”方法,允许您等待补间完成,终止或启动,或者让它到达给定的位置或循环。 多种旋转模式 轮换补间可以采用最短路径,完整路径,也可以使用本地或世界轴。 共享方法 它是Tweener还是序列?谁在乎?它们都从Tween继承,因此您可以以相同的方式存储它们并控制它们。 插件 DOTween在构建时考虑了可扩展的体系结构,允许您将自己的补间插件创建为单独的文件。 附加功能 额外的虚拟方法,可以在给定的延迟后调用函数。 所有的基础知识 回调,循环,轻松(包括AnimationCurves和自定义缓动功能),SpeedBased和许多其他补间选项。此外,更新类型的选择:常规,固定,延迟,加上选项,使其与timeScale无关。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值