【unity学习笔记三十二】DoTween的使用与详解

DOTween插件一般与UGUI结合使用

DoTween的运动方式

 

1、DOTween.To()方法

对变量做一个动画,通过插值的方式修改一个值的变化

using UnityEngine;
using System.Collections;
using DG.Tweening;//引入DoTween命名空间
public class GameStart : MonoBehaviour
{
​public Vector3 myValue = new Vector3(0, 0, 0);
void Start()
{
//对变量做一个动画,通过插值的方式去修改一个值的变化
DOTween.To(() => myValue, x => myValue = x, new Vector3(10, 0, 0), 2);//用两秒的时间从0,0,0变化到10,10,10
//()=> myValue,表示返回值为myValue,x=>myValue=x,表示将系统计算好的x值(当前值到目标值的插值)赋给myValue,new Vector3(10,0,0),表示达到的目标值,2表示所需时间
}

2、控制Cube和UI面板的动画

1)、将脚本挂在Cube上,并且在Update方法中把myValue的值赋给当前位置,这样便实现了Cube从当前位置移动到了目标位置

using UnityEngine;
using System.Collections;
using DG.Tweening;//引入DoTween命名空间
public class GameStart : MonoBehaviour
{
public Vector3 myValue = new Vector3(0, 0, 0);
void Start()
{
//对变量做一个动画,通过插值的方式去修改一个值的变化
DOTween.To(() => myValue, x => myValue = x, new Vector3(10, 0, 0), 2);//用两秒的时间从0,0,0变化到10,10,10
//()=> myValue,表示返回值为myValue,x=>myValue=x,表示将系统计算好的x值(当前值到目标值的插值)赋给myValue,new Vector3(10,0,0),表示达到的目标值,2表示所需时间
}
void Update()
{
transform.position = myValue;//赋值给当前位置
}

2)、UI面板的移动

新建任务面板,将脚本挂到UI面板上
using UnityEngine;
using System.Collections;
using DG.Tweening;//引入DoTween命名空间
public class GameStart : MonoBehaviour
{
private Vector3 myValue = new Vector3(1500, 0, 0);
// public RectTransform TaskPanelTransform;//UGUI是通过RectTransform组件来控制移动属性的
void Start()
{
//对变量做一个动画,通过插值的方式去修改一个值的变化
DOTween.To(() => myValue, x => myValue = x, new Vector3(0, 0, 0), 2);//用两秒的时间从0,0,0变化到10,10,10
//()=> myValue,表示返回值为myValue,x=>myValue=x,表示将系统计算好的x值(当前值到目标值的插值)赋给myValue,new Vector3(10,0,0),表示达到的目标值,2表示所需时间
}
void Update()
{
transform.localPosition = myValue;//UGUI中坐标为局部坐标
}
}

3)、对float类型的值进行修改

public float myValue2=0;
void Start()
{
DOTween.To(() => myValue2, x => myValue2 = x, 10, 2);//表示将一个类型的值从0变为10,所需时间是2秒
}

FromTween:表示让物体从目标位置移动到当前位置,即等同于播放反向的移动动画
DOMoveX()、DOMoveY()、DOMoveZ()

如果只是让物体的单个坐标移动,可直接用DOMoveX()、DOMoveY()、DOMoveZ()方法控制移动动画,参数为(目标位置,所需时间)

 transform.DOMoveX(5, 1);

From()

DoTween中任何调用动画的方法后面都可以添加From(),表示从目标位置移动到当前位置

transform.DOMoveX(5, 1).From();//表示让物体从目标位置移动到当前位置

From(true)

表示目标坐标等于当前坐标加上当前目标坐标,如果物体当前坐标为2,那么这行代码表示从目标位置(5+2),经过1秒,移动到当前位置(2)

transform.DOMoveX(5, 1).From(true);

DOLocalMoveX()、DOLocalMoveY()、DOLocalMoveZ()

表示局部坐标的位移动画方法。DoTween中所有对动画的设置都是通过对象Tweener来完成的

Tweener tweener=transform.DOLocalMoveX(0, 2f);

SetEase()

我们可以通过次方法来设置动画的曲线,曲线动画效果很多,在此仅做三个案例,其他的可以在系统给的枚举类型中找
Ease.InBack

表示物体先向后一点,再向前播放

tweener.SetEase(Ease.InBack);

Ease.InBounce

相当于一个蓄力进入的效果

tweener.SetEase(Ease.InBounce);

Ease.OutBounce

相当于一个落地之后的弹跳效果

tweener.SetEase(Ease.OutBounce);

SetLoops()

我们可以通过此方法设置动画循环的次数

tweener.SetLoops(2);//表示动画的循环次数

OnComplete()

表示事件函数,当前动画播放完后调用另一个方法,参数为需要调用的方法

void Update()
{
if (Input.GetMouseButtonDown(0))
{
Tweener tweener = transform.DOLocalMoveX(0, 2f);//DoTween中所有对动画的设置都是通过对象Tweener来完成的
tweener.SetEase(Ease.OutBounce);//相当于一个落地之后弹跳的效果
tweener.SetLoops(2);//表示动画的循环次数
tweener.OnComplete(OnClick);//表示当前动画播放完之后调用的事件,相当于一个注册方法,参数为需要注册的方法
}
}
void OnClick()
{
print(“sss”);
}

DOText()

对话框文字动画,该方法显示打字机效果

private Text text;
void Start ()
{
text = GetComponent<Text>();
}
void Update () {
if (Input.GetMouseButtonDown(0))
{
text.DOText(“轰隆隆……\n大地在颤抖,\n这是哪里?\n为什么我的头会这么痛……\n……谁来救救我……”,10);//表示再两秒内显示参数内文本(打字机效果)
}
}

DOShakePosition()

屏幕震动效果,原理是让摄像机进行随机方向的位移,产生震动的假象

if (Input.GetMouseButtonDown(0))
{
transform.DOShakePosition(0.8f);//表示震动时间是0.8秒,震动方向随机
transform.DOShakePosition(0.8f,new Vector3(1,1,0));//表示震动时间是0.8秒,震动方向为x和y方向,震动强度为1
}

DOColor()、DOFade()

颜色渐变和透明度渐变动画

if (Input.GetMouseButtonDown(0))
{
text.DOText(“轰隆隆……\n大地在颤抖,\n这是哪里?\n为什么我的头会这么痛……\n……谁来救救我……”, 10);//表示再两秒内显示参数内文本(打字机效果)
text.DOColor(Color.blue, 1f);//渐变颜色动画
text.DOFade(1, 5);//渐变透明度动画参数为(透明度,渐变时间),其中0为不透明,1为完全透明
}

DoTween插件的可视化操作

在物体上添加DoTweenAnimation脚本

如何在脚本中控制DoTweenAnimation动画脚本的播放

前提,脚本挂在面板上,并且取消DoTweenAnimation面板的自动播放和自动销毁
using UnityEngine;
using System.Collections;
using DG.Tweening;
using UnityEngine.UI;
public class Panel : MonoBehaviour
{
private DOTweenAnimation tweenAnimation;
private Button _btnButton;
private bool isShow = false;
void Start ()
{
tweenAnimation = GetComponent<DOTweenAnimation>();
_btnButton =transform.parent.Find(“Button”).GetComponent<Button>();
_btnButton.onClick.AddListener(OnClickBtn);
}
void OnClickBtn()
{
if (isShow==false)
{
tweenAnimation.DOPlayForward();
isShow = true;
}
else
{
tweenAnimation.DOPlayBackwards();
isShow = false;
}
}
}

DoTweenPath路径编辑器

在场景中添加一个Cube,在Cube身上添加组件DOTweenPath

 
参数:
Shift+Ctrl:添加路径点
Shift+Alt:移除路径点

 
AutoPlay:自动播放动画
AutoKill:自动删除动画
Duration:动画时长
Delay:延迟时长
Ease:动画曲线,Linear:匀速

Loop:循环次数,-1表示死循环
LoopType:循环模式,Restart:重新启动,表示走完路径后从开始重新走;Yoyo:悠悠球:从开始走到结尾,再从结尾走到开始
Incremental:增量模式

 
PathType:路径模式
CatmullRom:曲线;Linear:直线
ClosePath:封闭路径,表示使路径首尾相连
LocalMovement:是否是本地坐标

Orientation:运动朝向
ToPath:朝向路径方向
Look At Transform:朝向一个目标物体
Look At Position:朝向一个目标位置

 
Relative:相对的,表示路径跟随物体移动
Show Indexs是否显示索引

 触发事件和路径点的坐标的设置

 

 添加按钮控制动画的播放

在场景中添加Button,并且将Cube拖进Button的OnClick事件方法中选择DOTweenPath的DOTogglePause方法,实现当点击按钮后开始播放动画,再次点击时会停止播放(前提:将DOTweenPath组件的AutoPaly和AutoKill选项取消选择)

发表评论

电子邮件地址不会被公开。 必填项已用*标注