Unity3D 为了游戏的效果或者游戏的美观性,常常需要一些UI的动画来美化游戏的界面。
那么UI常用到的动画制作方法有哪些呢?项目中常用到的ITween、DoTween这两个插件来制作补间动画,也有人会用Unity3D自带的动画功能来K帧制作动画效果(这个方法我还不久前听说的,作为一个屌丝程序不能接受这个K帧动画的方法,虽然使用方法很简单但是细节这些没办法自己用代码操控,以及动画管理上、内存、效率上都都是问题,这也是为什么国外大神会ITween这些补间动画插件根本原因了)对于这个由方法我就不说啥东西了,免得被人喷死~
ITween是一个很出名的补间动画插件,因为小巧而且功能十分强大所以一直都是深受独立开发者以及公司的喜爱的,但是ITween也有自身的一些缺点以及性能上的缺陷,慢慢的就有性更好的补间动画插件出现,像是LeanTween、Hotween、DOTween等(这些都是我知道的补间动画),如果你对它们之间那个性能的比较可以去DoTween官网去查看一下,毕竟DoTween作者肯定要给使用者知道它的插件有多强大才能吸引到使用者,DoTween的功能强大、效率高、可读性高以及使用方法简单。
因为DoTween已经支持UGUI的补间动画开发,所以这里就用UGUI来做简单的演示和讲解。
首先我们要使用DoTween的命名空间才可以调用DoTween的相关函数,如图所示:
加完命名空间后,继续往后面学习To函数,这是一个十分常见的功能需求就是让UI移动到指定位置,这样我们就会用到To函数正如它的命名一样,但是它的功能不仅仅局限于从某个位置到另一个位置怎么简单。我们先来看看这个函数究竟怎么使用。大体的写法如下图所示:
myValue2表示初始参数,x可以理解成temp中间参数并且把这个数赋值到myValue2,-10则是结束参数,2则是动画完成所需要的时间。因为To函数是重载函数因此它不局限在位置的移动方面上,float、double、Vector3、Color等这些都可以使用To函数来实现其效果。那么我来研究一下下面的代码,代码如下:
using UnityEngine;
using System.Collections;
using DG.Tweening;
public class GetStart : MonoBehaviour {
public Transform cubeTransform;
public RectTransform taskPanelTransform;
public float myValue2 = 0;
// Use this for initialization
void Start () {
//对变量做一个动画 (通过插值的方式去修改一个值的变化)
DOTween.To(() => taskPanelTransform.localPosition, x => taskPanelTransform.localPosition = x, new Vector3(0, 0, 0), 2);
DOTween.To(() => myValue2, x => myValue2 = x, -10,2);
}
// Update is called once per frame
void Update () {
cubeTransform.position = new Vector3(myValue2,0,0);
}
}
上面代码都是修改组件的位置,第一个方法使用了直接修改localPosition参数直接达到修改组件位置,第二个方法就是采用了float参数再由float来修改组件的位置。这种方法明显就很灵活,不止可以传入Vector3还可以传入各种类型的参数。
虽然上面的用法看起来比ITween简单多了,感觉上还是挺繁琐的,因此DoTween还专门提供一些简单的Move功能函数方便我们阅读以及编写,方法如图所示:
就如图所示一样,panelTransform是一个Transfrom参数的函数直接利用DoLocalMove或者DoMove函数就可以实现移动,第一个参数表示移动到(0,0,0),第二参数表示动画时间为0.3f秒。这个方法比第一个方法要简单明了对吧。
那么如果我们不需要to到from这种需求呢?也就是变成了from到to这种呢?
这里我们DoTween也提供了from也是方法,用法如下图所示:
这个函数的意思X轴方向移动,从x=10移动到指定位置,动画播放时间为4秒,是否为from到to类型移动。那么指定位置是怎样指定的呢?
这个其实就是你组件默认的Tranfrom.position位置,如图所示:
从刚刚的代码理解的意思就是,从x = 10 到x = 1位置的动画需要花费4秒。
好了!Move功能的代码以及用法大体上就写完了,如果有新发现的话我会第一时间在后面添加的了~
DoTween的功能肯定不止这些,因此我会慢慢的添加自己学到的用法以及,如果有需要还会写一下较为炫酷的UI动画效果出来(PS:一般我懒得去想这些功能,如果你们有这些炫酷的动画可以介绍过,我可以尝试去实现一下)
——Begonia