7.2.3 DOTween插件使⽤⽅法简介
缓动动画既是⼀种编程技术,也是⼀种动画的设计思路。从设计⾓度来看,可以有以下描述。
①事先设计很多基本的动画样式,如移动、缩放、旋转、变⾊和弹跳等。但这些动画都以抽象⽅式表⽰,⼀般封装为程序函数。
②动画的参数可以在使⽤时指定,如移动的起点和终点、旋转的⾓度、变⾊的颜⾊,还有关键的动画时间⻓度等。
③动画默认是匀速播放,也可以指定播放的时间曲线。如可以做出先快后慢、先慢后快等效果,甚⾄还可以让时间在正向流逝和倒流中交替,实现弹簧式的效果。
④可以按时间顺序任意组合这些动画,如先放⼤再移动、先缩⼩再变⾊再移动等。
⑤可以同时播放多个这些动画。例如,⼀边放⼤⼀边移动、⼀边缩⼩⼀边变⾊⼀边移动等。总之,可以按时间顺序组合,也可以同时组合。
采⽤上⽂的思路,可以封装出易⽤的缓动动画库。例如DOTween就是⼀种常⽤的缓动动画插件。
1. 导⼊DOTween插件
在Asset Store中搜索“DOTween”即可找到DOTween(HOTweenv2)插件,如图7-8所⽰,使⽤免费版即可,下载并导⼊。
图7-8 Asset Store中的DOTween插件
导⼊插件后,会⾃动打开⼀个插件窗⼝。单击窗⼝下⽅的按钮即可再打开⼀个DOTween的⼯具⾯板。由于⽬前插件的功能越来越强⼤,因此特意增加了⼀个设置⾯板,如图7-9所⽰。
第⼀次打开设置⾯板时,中间有⼀个红⾊的“DOTWEEN SETUPREQUIRED”提⽰,它表⽰插件需要设置才能使⽤。单击绿⾊的设置按钮,会弹出⼀个新的⻚⾯,等待插件编译完成,会让开发者选择导⼊的模块,如图7-10所⽰。
这⾥列出了⾳频、物理等多个DOTween的模块,选或不选都不影响基础功能的使⽤,单击Apply按钮应⽤即可。
⼩提⽰
DOTween的多个模块
DOTween包含了很多好⽤的模块,甚⾄可以对⾳频做处理。但在⼤部分情况下,只需要常规的移动、缩放、旋转和改变材质的颜⾊,就⾜以做出⼤量的动效了。不导⼊以上模块,就已经默认包含了很多基本的缓动动画。顺利应⽤之后,试验⼀下它的基本使⽤⽅法。创建脚本TestTween,其内容如下。
using UnityEngine;
using DG.Tweening;
public class TestTween : MonoBehaviour {
void Update() {
if (Input.GetKeyDown(KeyCode.D))
{
// 1秒时间移动到在x轴上坐标为5的位置上
transform.DOMoveX(5, 1);
}
if (Input.GetKeyDown(KeyCode.A))
{
// 1秒时间移动到在x轴上坐标为0的位置上
transform.DOMoveX(0, 1);
}
}
}
然后将TestTween脚本组件挂载到任意物体上,按下D键,物体会沿x轴平移到x=5的位置,按下A键,⼜会移动到x=0的位置。可以看出,DOMoveX是⼀个简单的平移动画,第1个参数是x坐标,第2个参数是时间。
2. 基本缓动动画
前⽂已经试验了简单的平移动画,DOTween还提供了⼤量类似的动画模式,最常⽤的旋转、位移和缩放都是直接对Transform组件操作的。各种动画使⽤⽅法⼤同⼩异,列举如下。⾸先是Transform组件的动画,如表7-1所⽰。
表7-1 Transform组件的动画
以上函数基本涵盖了所有的Transform组件缓动动画⽅法。除简单的移动、旋转和缩放动画外,常⽤的还有摄像机缓动动画,作⽤于Camera组件,如表7-2所⽰。
可以⽤缓动动画慢慢改变材质的颜⾊、透明度等,表7-3是作⽤于材质(Material)的缓动动画。
UI⽂本通常需要⼀些动态效果,如打字机效果(⽂字⼀个接⼀个出现)和改变⽂字颜⾊等。DOTween还有⼀些专门⽤于UI⽂本组件(Text)的缓动动画,如表7-4所⽰。
3. 动画曲线(Ease)
通过试验会发现,前⾯的动画效果都不是匀速运动的,⽽是有⼀个从快到慢的变化。这是因为DOTween默认的动画曲线不是Linear曲线,⽽是Out Quad曲线。
在缓动动画中,动画曲线称为Ease,它有多种内置的模式,包括通过修改DOTween设置可以改变默认的动画曲线。选择主菜单中的Tools→Demigiant→DOTween Utility Panel可以重新打开DOTween的设置⻚⾯,其中的Ease选项就是动画曲线。可以将默认的Out Quad改为简单的Linear试试效果,如图7-11所⽰。
图7-11 设置缓动动画的动画曲线
DOTween提供了⾮常多的缓动动画曲线模式,这⾥不⼀⼀详述。不过常⽤的⼏种模式有明显的命名规则,如In Sine、Out Sine、In Out等,以下进⾏概括的解释。
In指的是⼀种由慢到快的⽅式,Out则指的是由快到慢。Sine(正弦曲线)指的是⽐较平滑的过渡;⽽Quad则指的是会有更明显的快慢变化;⽐Quad速度变化更剧烈的,还有Cubic、Quart、Quint等。Expo代表指数曲线,还有更多特殊的曲线,如有弹性的Elastic、先后退再前进的Back,以及Bounce(弹跳曲线)。
当然,如果直接修改默认的动画曲线,那会导致所有动画都使⽤统⼀的曲线。实际上每个动画都可以⽤不同的动画曲线,⽰例写法如下。
if (Input.GetKeyDown(KeyCode.A))
{
Tweener t = transform.DOMoveX(10, 1);
t.SetEase(Ease.OutQuad);
}
if (Input.GetKeyDown(KeyCode.D))
{
transform.DOMoveX(0, 1).SetEase(Ease.InOutSine);
}
DOMove等缓动函数的返回值⽤Tweener类型的变量接收,然后再对Tweener进⾏设置即可。除了SetEase以外还有其他更多可调⽤的⽅法。
4. 动画的组合
使⽤Sequence(缓动动画序列)可以让多个动画依次播放,也可以
在动画之间插⼊等待时间,其⽰例如下。
// 创建动画序列
Sequence seq = DOTween.Sequence();
// 添加动画到序列中
seq.Append(transform.DOMove(new Vector3(3,4,5), 2));
//添加时间间隔
seq.AppendInterval(1);
seq.Append(transform.DOMove(new Vector3(0, 0, 0), 1));
// 按时间插⼊动画
// 下⾯代码的第1个参数为时间,表⽰插⼊动画到规定的时间点
seq.Insert(0, transform.DORotate(new Vector3(0, 90, 0), 1));
缓动动画序列有多个常⽤⽅法,Append可以在序列后⾯添加动画,AppendInterval⽤于添加等待时间,⽽Insert则是在指定时间处插⼊动画。
特别要注意,使⽤Insert插⼊的动画并不像猜想的那样会将原有动画推迟到后⾯,⽽是会和原来的动画同时播放。这就引出了⼀个关键
问题:DOTween的动画是可以同时播放的,⽽且Sequence虽然名为“序列”,但实际上也⽀持多个动画同时播放。除了利⽤Sequence顺序播放动画或同时播放动画外,实际上直接创建多个动画,它们也会同时播放,其⽰例如下。
// 两个动画同时播放,向斜上⽅移动
Tweener t = transform.DOMoveX(10, 1);
t.SetEase(Ease.OutQuad);
transform.DOMoveY(10, 1);
⼤部分缓动动画可以做到合理混合的效果,但有时同时播放多种动画也会产⽣不合理的结果。某些缓动⽅式带有Blendable关键字,如DOBlendableMoveBy,这类缓动动画能够确保融合效果的正确性。
5. 控制动画的播放
缓动动画最⼤的优势在于它是完全由程序控制的,它的背后是⼀套简洁的数学算法,因此缓动动画很容易实现暂停、重放和倒放等功能。DOTween也提供了多种⽅法控制动画的播放,其⽰例如下。
//播放
transform.DOPlay();
//暂停
transform.DOPause();
//重播
transform.DORestart();
// 倒播,此⽅法会直接退回起始点
transform.DORewind();
//删除动画
transform.DOKill();
//跳转到指定时间点。参数1表⽰跳转的时间点,参数2表⽰是否⽴即播放
transform.DOGoto(1.5f, true);
//倒向播放动画
transform.DOPlayBackwards();
//正向播放动画
transform.DOPlayForward();
6. 动画回调函数
为了更好地让动画与逻辑配合,与动画帧事件类似,也可以为缓动动画添加⼀些回调函数。最常⻅的是在播放结束时⾃动调⽤⼀个函数,其⽰例如下。
// 动画完成回调,为⽅便起⻅回调函数写成了Lambda表达式
transform.DOMove(new Vector3(3,3,0), 2).OnComplete(() => {
Debug.Log("Tween 播放完成");
});
// ⽆限循环震动
Tween t2 = transform.DOShakePosition(1, new Vector3(2, 0,
0));
t2.SetLoops(-1);
// 每次循环完成时回调
transform.DOMove(Vector3.zero, 2).OnStepComplete(() => {
Debug.Log("Tween 单次播放完成");
});
7.2.4 拖尾特效
拖尾是⼀种很酷的特效。拖尾的原理来⾃⼈类的视觉残留:观察快速移动的明亮物体,会看到物体移动的轨迹。摄像机通过调整快门时间,也可以拍出具有拖尾效果的照⽚,如在城市的夜景中,汽⻋的尾灯拖曳出红⾊的线条。
在较⽼的Unity版本中,拖尾效果需要⽤插件实现。现在Unity已经内置了Trail Renderer(拖尾渲染器)组件,可以⽅便地制作出拖尾效果。
拖尾渲染器组件的使⽤⽐较简单,其步骤如下。
01 新建⼀个球体,为它添加Trail Renderer组件。
02 不需要运⾏游戏,直接在场景中改变球体位置,就会看到拖尾效果。但由于没有指定拖尾材质,显⽰是紫红⾊(紫红⾊代表材质错误或缺失)。
03 在Trail Renderer组件中找到Materials选项,展开该选项,可以指定材质的数量和材质资源。如果在前⾯的例⼦中已经导⼊粒⼦特效素材,那么通过搜索“Trail”可以找到多个拖尾专⽤的材质,任选⼀个即可。
04 选择材质,再拖曳物体,就会看到拖尾效果了,如图7-12所⽰。
要让拖尾达到较好的效果,就要对拖尾的⻓度(停留时间)、宽度、材质和颜⾊渐变等参数进⾏细致调节。表7-5将逐⼀对TrailRenderer组件的属性做说明。
表7-5 Trail Renderer组件的属性
还有⼀些与光照、⾼级渲染相关的属性,它们的使⽤与光照和渲染有关,此处不再详述。
将拖尾设置完成以后,会在物体运动时⾃动出现,不需要额外设置。脚本主要是开启或关闭拖尾,以及改变拖尾的时间、材质等,其⽰例如下。文章来源:https://www.toymoban.com/news/detail-845659.html
using UnityEngine;
public class TestTrail : MonoBehaviour
{
TrailRenderer trail;
public Material mat1;
public Material mat2;
void Start()
{
trail = GetComponent<TrailRenderer>();
trail.sharedMaterial = mat1;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
if (trail.sharedMaterial == mat1)
{
trail.sharedMaterial = mat2;
trail.startColor = Color.red;
trail.endColor = Color.red;
}
else
{
trail.sharedMaterial = mat1;
trail.startColor = Color.blue;
trail.endColor = Color.blue;
}
}
}
}
将上⽂的脚本挂载到有Trail Renderer组件的物体上,并给脚本设置两种拖尾材质。运⾏游戏,并在场景中改变物体位置来测试拖尾。再单击Game窗⼝并按空格键,就可以动态修改拖尾的材质和颜⾊。文章来源地址https://www.toymoban.com/news/detail-845659.html
到了这里,关于Unity 3D脚本编程与游戏开发【4.0】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!