[转]DOTween教程☀️DOTween的使用教程


📢 DOTween官网

DOTween官网: 传送门


 

🟥 DOTween使用技巧

1️⃣ DoKill的使用技巧

当前dotween动画没播放完,便再次播放有冲突的操作,如连续多次播放、正播、倒播,导致显示不正常或报错。

解决方法:在每次开始执行播放动画时,先加上下面对应类似的杀死进程代码,就OK了

transform.DOKill();
transform.RectTransform().DOKill();


 

2️⃣ 忽略timeScale的影响

让DOTweenAnimation忽略Time.timeScale = 0的影响

 GetComponent<DOTweenAnimation>().tween.SetUpdate(true);


 

3️⃣ 动态添加DOTweenAnimation的方法

🚩 方法1:代码控制

transform.DOLocalRotate(new Vector3(0, 0, -360), 2, RotateMode.FastBeyond360)
                .SetEase(Ease.Linear).SetLoops(-1, LoopType.Restart).Play();


 

🚩 方法2:添加组件

在实际测试,发现有时莫名失效。建议采用预制体形式。

using DG.Tweening;
using DG.Tweening.Core;
 
DOTweenAnimation da= ob.gameObject.AddComponent<DOTweenAnimation>();
da.animationType = DOTweenAnimationType.LocalRotate;
da.easeType = Ease.Linear;
da.duration = 0.3f;
da.loops = -1;
da.endValueV3 = new Vector3(0, 50, 0);


 

🟧 DOTween的API介绍

1️⃣ DOTween.To

将某点在一定时间内移动到某点

using DG.Tweening;
 
Vector3 myvalue = new Vector3(0, 0, 0);
DOTween.To(() => myvalue, x => myvalue = x, new Vector3(10, 10, 10), 2);
                 要移动的初始值                目标值                时间


 

2️⃣ DOMove

在1s内将目标物体从当前位置移动到目标位置

transform.DOMove(new Vector3(1, 1, 1), 1);
transform.DOLocalMove(new Vector3(1, 1, 1), 1);


 

3️⃣ DOMoveX、DOMoveY、DOMoveZ

从当前位置延X/Y/Z方向,移动到目标位置5

transform.DOMoveX(5, 1);


 

4️⃣ From

从目标位置,移动到当前位置

绝对位置,若当前坐标(1,0,0),即从5运动到1
transform.DOMoveX(5, 1).From();
transform.DOMoveX(5, 1).From(false);
 
相对位置,若当前坐标(1,0,0),即从6运动到1(6-1=5,相对位移5)
transform.DOMoveX(5, 1).From(true);


 

5️⃣ Pause、DOPlay、DOPlayForward、DOPlayBackwards、DORestart

动画暂停、动画播放、动画向前播放、动画倒放

//DOTween播放会生成动画,动画保存在Tweener信息中,默认动画播放完会被销毁,要想倒放,必须设为不被销毁
//tweener也会播放动画
Tweener tweener= transform.DOLocalMove(new Vector3(1, 1, 1), 1);
tweener.SetAutoKill(false);
//暂停动画
tweener.Pause();
//播放动画,只播放一次,再次调用不可播放
transform.DOPlay();
//向前播放动画
transform.DOPlayForward();
//动画倒放
transform.DOPlayBackwards();
//重新播放动画:若用的可视化编辑,需取消AutoKill
transform.DORestart();


 

6️⃣ SetEase

设置动画曲线,即动画运动方式(类似设置PPT动画的出现效果)

Tweener tweener = transform.DOLocalMoveX(0, 5);
tweener.SetEase(Ease.InBounce);


 

7️⃣ SetLoops

设置动画播放次数,下为播放两次动画

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


 

8️⃣ 事件函数

动画播放完成事件函数

Tweener tweener = transform.DOLocalMoveX(0, 5);
//动画播放完成调用事件函数
tweener.OnComplete(你的方法);
 
//动画销毁调用事件函数
tweener.OnKill(你的方法);
 
//动画播放时调用事件函数(一直调用)
tweener.OnPlay(你的方法);
 
//动画暂停时调用事件函数
tweener.OnPause(你的方法);
 
//动画重置时调用事件函数
tweener.OnRewind(你的方法);
 
//动画开始播放时调用事件函数
tweener.OnStart(你的方法);
 
//动画播放时调用事件函数(一次)
tweener.OnPlay(你的方法);


 

9️⃣ DOText 文本动画

若文本框内无文字,在3s内逐字显示文字。

若有文字,则逐字覆盖掉原先文字,显示新文字

GetComponent<Text>().DOText("接下来我们进入第二篇章", 3);


 

🔟DOShakePosition 震动效果

挂载在摄像机上面

//持续时间,其余默认
transform.DOShakePosition(1);
//持续时间、强度(下为只在X、Y方向上震动)
transform.DOShakePosition(1,new Vector3(3,3,0));


 

1️⃣1️⃣ DOColor 改变颜色

在2s中将原本颜色变为红色

GetComponent<Text>().DOColor(Color.red, 2);


 

1️⃣2️⃣ DOFade 改变透明度

文字透明度会在3s内从0变为1

GetComponent<Text>().DOFade(1, 3);


 

🟩 可视化路径编辑

该组件在DOTween Pro插件里面,pro版下载地址:传送门

在这里插入图片描述

1️⃣ DoTweenPath面板属性的含义

该面板的属性含义如下:

  • Shift+Ctrl:添加路径点
  • Shift+Alt:删除路径点
  • Duration:时长
  • Delay:延迟时间
  • Ease:运动模式
  • Loops:播放次数,-1为循环播放,0为播放一次
  • Path Type:Linner/Catmull Rom,Linner,线性;Catmull Rom给路径做圆滑处理
  • Close Path:将起点与终点连接,围成一个圈
  • Local Movement:局部坐标下移动
  • Orientation:朝向。To Path,游戏物体朝向路径运动;Look At Transform;Look At Position
  • Relative:勾选后,选择游戏物体,路径可整体移动
  • Show Indexes:是否显示路径索引
  • Handles Type:Free/Full,Full,每个点显示三坐标
  • Reset Path:删除所有点,重置路径

2️⃣ 代码控制DoTweenPath的方法

using UnityEngine;
using DG.Tweening;
 
public class UIController : MonoBehaviour {
 
    DOTweenPath tweenAnimation;
 
	void Start () {
        tweenAnimation = GetComponent<DOTweenPath>();
    }
	
    public void OnClick()
    {
        //开始播放
        tweenAnimation.DOPlay();
 
        //运动开关:点击一次,继续开始播放,再点击一次,在当前位置暂停
        tweenAnimation.DOTogglePause();
 
        //重新播放动画
        tweenAnimation.DORestart();
 
        //杀死动画,此后无法再播放动画
        tweenAnimation.DOKill();
    }
}

//十秒内X,Y,Z 局部坐标(localPosition)移动到 10,10,10 位置 //transform.DOBlendableLocalMoveBy(new Vector3(10, 10, 10), 10); //十秒内 X,Y,Z 方向的局部旋(localPosition),动到 30,30,30 //transform.DOBlendableLocalRotateBy(new Vector3(30, 30, 30), 10); //十秒内X,Y,Z坐标移动到 自身坐标 加 new Vector3( 10,10,10) 位置 原始 坐标 3,3,3,移动后 13,13,13 //transform.DOBlendableMoveBy(new Vector3(10, 10, 10), 10); //十秒内X,Y,Z自身旋到 30,30,30(有父物体的相对于父物体) //transform.DOBlendableRotateBy(new Vector3(30, 30, 30), 10); //十秒内 自身X,Y,Z方向的比例 加 3,3,3如原始比例 2,1,1 变化后5,4,4 //transform.DOBlendableScaleBy(new Vector3(10, 10, 10), 10); //执行该方法,变化立即结束,且完成移动 //transform.DOComplete(); //在变化过程中执行该方法,则物体慢慢的变回原样,如果变化已经完成,该方法无效 //transform.DOFlip(); // 变化过程中执行该方法,则物体变化到 第二秒 时该物体的位置、比例等 //transform.DOGoto(2); //十秒内 弹跳 3次 //transform.DOJump(new Vector3(10, 10, 10), 3, 10); //停止掉当前的变化 //transform.DOKill(); // 十秒内 弹跳 3次, 局部坐标最终变化为 10, 0, 10 //transform.DOLocalJump(new Vector3(10, 10, 10), 3, 10); // 5 秒内, 局部坐标变化到 10,10,10 //transform.DOLocalMove(new Vector3(10, 10, 10), 5); // 10 秒内 X 局部坐标变换到 5 //transform.DOLocalMoveX(5, 10); // 10 秒内 Y 局部坐标变化到 5 //transform.DOLocalMoveY(5, 10); //10 秒内 Z 局部坐标变化到 5 //transform.DOLocalMoveZ(5, 10); //transform.DOLocalPath(); //5 秒内 局部旋变化到 10,10, 10 //transform.DOLocalRotate(new Vector3(10, 10, 10), 5); // 自身朝向 坐标(10,10,10) //transform.DOLookAt(new Vector3(10, 10, 10), 5); // 5 秒内 移动到 坐标 (10,10,10) //transform.DOMove(new Vector3(10, 10, 10), 5); //10 秒内 X 局部坐标变化到 5 //transform.DOMoveX(5, 10); //10 秒内 Y 局部坐标变化到 5 //transform.DOMoveY(5, 10); //10 秒内 Z 局部坐标变化到 5 //transform.DOMoveZ(5, 10); // //transform.DOPath(); //执行该方法停止 变化 //transform.DOPause(); //transform.DOPlay(); //变化结束前调用该方法,物体回到原始位置 //transform.DOPlayBackwards(); //执行 transform.DOPlayBackwards(); 物体回到原始位置 //执行 下面方法则再次变化 //transform.DOPlayForward(); //冲压机,在 5 秒内在原始坐标和下面坐标之间,来回冲压 //transform.DOPunchPosition(new Vector3(10, 10, 10), 5); //冲压机,在 5 秒内在原始旋和下面角度之间,来回冲压变化 //transform.DOPunchRotation(new Vector3(50, 50, 50), 5); //冲压机,在 5 秒内在原始比例和下面比例之间,来回冲压变化 //transform.DOPunchScale(new Vector3(5, 5, 5), 5); //在变化结束之前,执行该方法,则重新开始变化 //transform.DORestart(); //变化过程中执行该方法,回到原始 //transform.DORewind(); // 10 秒内 旋角度 到 (50,50,50) //transform.DORotate(new Vector3(50, 50, 50), 5); // 10 秒内 比例变化到 (5,5,5) //transform.DOScale(new Vector3(5, 5, 5), 5); // 10 秒内 X 比例变化到 5 //transform.DOScaleX(5, 10); // 10 秒内 Y 比例变化到 5 //transform.DOScaleY(5, 10); // 10 秒内 Z 比例变化到 5 //transform.DOScaleZ(5, 10); // 10 秒内 物体 X,Y,Z 坐标在 自身-5 到 自身加 5 之间震动 //transform.DOShakePosition(10, new Vector3(10, 10, 10)); // 10 秒内, 物体 X,Y,Z 旋角度在 自身-5 到 自身加 5 之间震动 //transform.DOShakeRotation(10, new Vector3(10, 10, 10)); // 10 秒内, 物体 X,Y,Z 比例在 自身-5 到 自身加 5 之间震动 //transform.DOShakeScale(10, new Vector3(10, 10, 10)); //在变化过程中执行该方法,停止、开始、停止、开始 //transform.DOTogglePause(); // 执行该方法,坐标立即变化为 0,5,0, 从 0,5,0 两秒移动到初始位置 //transform.DOMove(new Vector3(0, 5, 0), 2).From(); // 执行该方法,移动到相对于原始位置 6,0,2 的位置 // 如原始位置 3,2,1。 移动后位置为 3+6,2+0,2+2 即 9,2,4 //transform.DOMove(new Vector3(6, 0, 2), 2).SetRelative();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值