Unity 插件 DOTween 使用方法

Unity 插件 DOTween 使用方法

项目开发中经常会有一些简单的动画需求
1.旋转
2.N秒从一个位置移动到某个位置,两点之间来回移动
3.比例缩放,果冻效果
4.改变颜色
5.队列顺序执行动画
等等动画需求
以上各种动画设置循环、延迟时间、执行次数、速率变化(各种缓动曲线效果)、执行完成回调、重新播放、暂停、取消等等

下载 DoTween插件
1.解压下载的插件,导入到Unity 中,安装DoTween,菜单栏 Tools->Demigiant->DoTween Utility Panel
在这里插入图片描述
弹出如下界面
点击 Setup DOTween… 按钮
在这里插入图片描述
下方按钮:Website、Documentation、Changelog 等按钮点击可以打开 DoTween 网站,查看说明文档、版本变化等

2.多选栏:Preferences 根据自己的需求设置
在这里插入图片描述
代码使用如下

创建一个 Tween 从自身坐标 一秒内 移动到 坐标 Vector3(5, 5, 5) 位置,并添加移动完成回调

Tween tween = DOTween.To(() => transform.position, r => transform.position = r, new Vector3(5, 5, 5), 1);
// 移动完成回调
tween.onComplete += ()=> {
    Debug.LogError("Complete");
};

创建一个 Tween 对象, 另 number的值在 5 秒内变化到 100,每帧执行回调

int number = 0;
Tween tween = DOTween.To(() => number, x => number = x, 100, 5);
// 添加每帧的回调,在
tween.OnUpdate(() => Debug.LogError(number));

通过 transform 创建动画
5 秒内X,Y,Z 局部坐标(localPosition)移动到 10,10,10 位置

transform.DOBlendableLocalMoveBy(new Vector3(10, 10, 10), 5);

10 秒内 X,Y,Z 方向的局部旋转(localPosition),转动到 30,30,30

transform.DOBlendableLocalRotateBy(new Vector3(30, 30, 30), 10);

十秒内X,Y,Z坐标移动到 自身坐标 加 (10,10,10) 位置, 原始 坐标 (3,3,3),移动后 坐标(13,13,13)

transform.DOBlendableMoveBy(new Vector3(10, 10, 10), 10);

5秒内 自身X,Y,Z 的比例 加 (3, 2, 1) 如原始比例 (5, 6, 7) 变化后 (8, 8, 8)

transform.DOBlendableScaleBy(new Vector3(3, 2, 1), 5);

//在动画执行过程中调用 DOComplete方法,则动画立即执行结束,并将最终结果 (8, 8, 8) 赋值给 transform
transform.DOComplete();

//在动画执行过程中调用 DOFlip 方法,则物体慢慢的变回原样,如果动画已经执行完成,该方法无效
transform.DOFlip();

//在动画执行过程中调用 DOPlayBackwards方法,则物体慢慢的变回原样,如果动画已经执行完成,该方法无效
transform.DOPlayBackwards();
//当执行过 DOPlayBackwards 后,再执行 DOPlayForward,则动画继续向最终目标变化
transform.DOPlayForward();

十秒从当前位置,分 3 次跳跃,跳跃力度为5,最终落地坐标为 (10, 10, 10)

Vector3 endValue = new Vector3(10, 10, 10);
float jumpPower = 5; // 决定每次跳跃的速率和高度,值越大,每次跳跃速度越快,高度越高
int numJumps = 3;
float duration = 10;
// 调用 DOJump 最终结果为世界坐标  transform.position = (10, 10, 10)
transform.DOJump(endValue, jumpPower, numJumps, duration);
// 调用 DOLocalJump 最终给结果为相对父节点坐标 transform.localPosition =  = (10, 10, 10)
transform.DOLocalJump(endValue, jumpPower, numJumps, duration);

当动画正在执行时调用 DOKill,动画立即停止

transform.DOKill();

5 秒内, 局部坐标变化到 (10, 10, 10)

transform.DOLocalMove(new Vector3(10, 10, 10), 5);

3 秒内 X 局部坐标变换到 5

transform.DOLocalMoveX(5, 3);

5 秒内 局部旋转变化到 10,10, 10

transform.DOLocalRotate(new Vector3(10, 10, 10), 5);

5秒内将自身朝向改变为朝向 坐标(10,10,10)

transform.DOLookAt(new Vector3(10, 10, 10), 5);

5 秒内 移动到 世界坐标 transform.position =(10,10,10)

transform.DOMove(new Vector3(10, 10, 10), 5);

10 秒内 X 世界坐标 transform.position.x = 5

transform.DOMoveX(5, 10);

执行动画时调用 DOPause,动画停止

transform.DOPause();

执行动画时调用 DOPlay,动画继续

transform.DOPlay();

5 秒内在 当前坐标 和 坐标 (10, 10, 10) 之间,来回往复移动

transform.DOPunchPosition(new Vector3(10, 10, 10), 5);

5 秒内在 当前旋转 和 欧拉角旋转(50, 50, 50)之间,来回往复变化旋转

transform.DOPunchRotation(new Vector3(50, 50, 50), 5);

5 秒内在当前缩放比例 和 缩放(5, 5, 5)比例之间,来回往复变化缩放比例

transform.DOPunchScale(new Vector3(5, 5, 5), 5);

在动画结束之前,执行 DORestart 方法,则动画重新开始

transform.DORestart();

动画执行过程中执行 DORewind 方法,所有变化复原会原样

transform.DORewind();

5 秒内 欧拉角旋转角度 (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 秒内 物体 X,Y,Z 坐标在当前坐标和 坐标(10, 10, 10) 空间内震荡移动

transform.DOShakePosition(10, new Vector3(10, 10, 10));

10 秒内, 物体 X,Y,Z 旋转角度在 当前欧拉角旋转 到 (10, 10, 10) 之间震荡旋转

transform.DOShakeRotation(10, new Vector3(10, 10, 10));

10 秒内, 物体 X,Y,Z 缩放比例在当前缩放 到 缩放 (10, 10, 10) 之间震荡变化

transform.DOShakeScale(10, new Vector3(10, 10, 10));

执行DOMove方法,坐标立即变化为 (0, 5, 0), 并从 (0, 5, 0) 坐标,两秒移动到初始位置

transform.DOMove(new Vector3 2).From();

移动到相对于当前位置 (6, 0, 2) 的位置
如原始位置 (3, 2, 1), 移动后位置为 (3+6, 0+2, 2+1) 即 (9, 2, 3)

transform.DOMove(new Vector3(6, 0, 2), 2).SetRelative();

添加事件回调方法

// 创建一个 Tweener 对象, 另 number的值在 2 秒内变化到 100
Tween t = DOTween.To(() => number, x => number = x, 100, 2);

// 添加各种事件的回调方法
t.OnStart(OnStartTween).OnKill(OnKill).OnPause(OnPause).OnPlay(OnPlay).OnRewind(OnRewind);
t.OnStepComplete(OnStepComplete).OnUpdate(UpdateTweenEd).OnComplete(OnComplete);

// 带参数的回调方法如下
t.OnUpdate(() => UpdateTweenED(number));

设置循环类型、缓动类型

Vector3 pos = Vector3.zero;
// 设置了循环类型 LoopType.Yoyo 和缓冲类型 Ease.InOutCirc
Tween tween = DOTween.To(() => pos, r => pos = r, new Vector3(5, 5, 5), 1).SetLoops(-1, LoopType.Yoyo).SetEase(Ease.InOutCirc);

//复制一个 Tween 对象的 id, ease, loops, delay, timeScale, callbacks, etc 到另一个 Tween 对象
// t 复制 tween 的循环类型和缓冲类型
Tween t = DOTween.To(() => transform.position, r => transform.position = r, new Vector3(15, 15, 15), 2).SetAs(tween);

// SetAutoKill  设置自动销毁
// SetDelay     设置延迟 
// SetEase      设置缓冲类型 
// SetId        设置ID 可以只用 int、string、object等类型的值
// SetLoops     设置循环类型
// SetRecyclable 设置为可回收,可循环使用的
// SetRelative   设置相对变化
// SetSpeedBased
// SetTarget
// 设置 Update 的值 告诉 Tween对象 是否忽视 Unity的 的 timeScale ,即是否受Unity 时间的影响
// SetUpdate(UpdateType.Normal, true) 设置为 true 为忽视 Unity的时间影响
//                                    设置为 false 为不忽视Unity的时间影响
// SetUpdate

transform.DOMoveX(20, 5).SetAutoKill(true).SetDelay(3).SetEase(Ease.InOutCirc)
            .SetId("superTween").SetLoops(-1, LoopType.Yoyo).SetRecyclable()
            .SetRelative().SetSpeedBased().SetTarget(transform).SetUpdate(UpdateType.Normal, true);

动画队列,创建一个动画队列,可以添加多个动画,一个动画执行结束后,执行下一个,知道最后一个执行结束

Sequence s = DOTween.Sequence();
// 添加 一个相对于原始位置 水平方向移动, 时间 3 秒,缓冲类型 为  Ease.InOutQuad
s.Append(transform.DOMoveX(6, 3).SetRelative().SetEase(Ease.InOutQuad));

//插入一个旋转, 设置循环类型为 来去 方式
// and will loop forward and backward twice
s.Append(transform.DORotate(new Vector3(0, 45, 0), 2).SetEase(Ease.InQuad).SetLoops(2, LoopType.Yoyo));
// Add a color tween that will start at half the duration and last until the end
s.Append(transform.GetComponent<Renderer>().material.DOColor(Color.yellow, 5));

设置 Text 的跑马字,一秒显示 N 个字

text = GetComponent<Text>();
// Animate the first text...
text.DOText("This text will replace the existing one", 2).SetEase(Ease.Linear).SetAutoKill(false).Pause();

relativeText = GetComponent<Text>();
// Animate the second (relative) text...
relativeText.DOText(" - This text will be added to the existing one", 2).SetRelative().SetEase(Ease.Linear).SetAutoKill(false).Pause();

scrambledText = GetComponent<Text>();
// Animate the third (scrambled) text...
scrambledText.DOText("This text will appear from scrambled chars", 2, true).SetEase(Ease.Linear).SetAutoKill(false).Pause();

开始所有 Tween 对象

DOTween.PlayAll();

所有 Tween对象 从新开始

DOTween.RestartAll();
  • 22
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值