Dotween——动画效果
DOTween 是一个快速、高效、完全类型安全的 Unity 面向对象动画引擎,针对 C# 用户进行了优化,免费和开源,具有大量高级功能。
要使用Dotween,需要导入名字空间
using DG.Tweening
也可以不导入,然后自己修改Global setting或Specifix settings。
例如:DOTween.Init(autoKillMode, useSafeMode, logBehaviour);
初始化
可以自己初始化,也可以默认系统自己初始化,但最好自己初始化。
这个操作也可以在DOTween的GUI中进行,但是代码可以实现中途变换,也就是说第二次初始化DOTween之前创建的tween不会受到这次初始化的影响。
static DOTween.Init(bool recycleAllByDefault=false,bool useSafeMode=true,LogBehaviour logBehaviour=LogBehaviour.ErrorsOnly)
recycleAllByDefault——设置为false说明不进行回收,结束后直接销毁useSafeMode——设置为true会使tween更慢但更安全,允许允许时处理事件LogBehaviour——根据所选模式进行错误、警告等信息记录
API
有一些小技巧能初步认识函数方法:
DO: 动作操作前缀。例如:DoMove(),DoKill()等等。 Set:动画设置操作前缀。例如:SetLoop(),SetEase()等等。 On: 响应回调事件前缀。例如: OnStart(),OnComplete()等等。
生命周期
在创建tween是,会自动播放。
结束后会自动终止。
更改autoKill为FALSE,则不会自动清除tween,可以实现重复使用。
不需要手动回收tween。
OnComplete(TweenCallback callback):动画完成触发事件
OnKill(TweenCallback callback):动画被销毁时触发
OnPlay(TweenCallback callback):当动画播放的时候触发,每次播放都会触发
OnPause(TweenCallback callback):当动画暂停时
OnRewind(TweenCallback callback):动画被重置时
OnStart(TweenCallback callback):当动画第一次播放的时候,再播的时候不会被触发了
OnStepComplete(TweenCallback callback):完成单个循环开始调用
OnUpdate(TweenCallback callback):每一帧调用
OnWaypointChange(TweenCallback callback):路径回调
使用方式
小白版:DOTween.To(()=>myValue,x=>myValue=x,100,1);
第一个lambda表达式表示将myValue返回给起始值,myValue是提前设置好的一个变量,中间的lambda表示更新数,x会由DOTween自动更新,然后赋予给myValue然后实现更新,100则是最终目标值,1代表时间,也就是说这一句表示myValue过渡到100,时间为1
原型为
DOTween.To(getter,setter,to,float duration)
- getter——一个委托,将属性的值返回给补间
- setter——一个委托,将属性的值设置给补间
- to——要到达的最终值
- duration——补间持续时间
专业版:transform.DOMoveX(100,1);
表示直接将目标对象当前的X坐标平滑过渡到100,时间为1
这是与一些已知Unity对象的适用方法,例如Transform、Rigidbody、Material
这些快捷方式有一个from版本,例如
transform.DOMoveX(100,1).from();指将对象从这个值缓动为当前值
这两种方式都会返回一个tween,用于储存为引用以后再次使用。
一些详细的基本使用方式:
其他方法:
Pause():暂停动画
SetLoops(3):循环3次
Sequences(序列)
不要使用空序列!!!
序列指一堆补间分为一组进行处理,同样一堆序列也可以分为一组,深度没有任何限制。——不过被嵌套的序列会被锁定
补间只能嵌套在单个序列中,不能重复分组。
初始化:
Sequence mySequence = DOTween.Sequence();
一些新概念:
回调函数——//todo
用以下方法操控序列:
Append(Tween tween)——添加一个tweenAppendCallback(TweenCallback callback)——添加一个回调函数AppendInterval(float interval)——添加一个时间间隔Insert(float atPosition,Tween tween)——在给定的时间位置插入给定的补间,这样一来可以重叠补间InsertCallback(float atPosition,TweenCallback callback)——如上,现在是插入回调函数Join(Tween tween)——在刚插入的最后一个补件或回调的位置同时插入新补间Prepend(Tween tween)——在序列最前面添加PrependCallback(TweenCallback callback)——同上PrependInterval(float interval)——同上
文档中的原话“You can create Sequences made only of callbacks and use them as timers or stuff like that.”
意思是可以利用回调函数与间隔时间这两个特性设置动画版计时器,而且会更加精准。
using UnityEngine;
using DG.Tweening;
public class MyScript : MonoBehaviour
{
private Sequence timerSequence;
private float elapsedTime;
private void Start()
{
// 创建仅包含回调函数的序列动画
timerSequence = DOTween.Sequence();
// 设置初始时间和计时间隔
elapsedTime = 0f;
float interval = 1f; // 1秒钟的间隔
// 添加回调函数到序列动画中,用作定时器
timerSequence.AppendCallback(TimerCallback).SetDelay(interval).SetUpdate(UpdateType.TimeScaleIndependent);
// 播放序列动画
timerSequence.Play();
}
private void TimerCallback()
{
// 在每个间隔触发的回调函数中执行自定义逻辑
elapsedTime += 1f;
Debug.Log("Elapsed Time: " + elapsedTime + " seconds");
// 可以在此检查条件是否满足,然后执行其他操作
}
}
效果是在控制台是输出秒数
注意格式timerSequence.AppendCallback(TimerCallback).SetDelay(interval).SetUpdate(UpdateType.TimeScaleIndependent);
说明可以这样快捷添加补间等操作
一般情况下在序列创建完后需要添加以下语句:
mySequence.SetAutoKill(false)——不自动销毁mySequence.Pause()——暂停播放等待mySequence.Play()控制播放
相关设置
全局设置包括一些安全模式,日志模式等,也可以设置播放模式,这些可以在GUI界面设置,具体函数可以参考文档。
这里附上一些重要的:
SetAs
说明这个之前先了解一下Tween类与TweenParams类
Tween类创造的对象用来储存补间动画,可以通过这个对象来设置对象的属性
TweenParams类对象用来储存补间动画的属性
Tween myTween = transform.DOMoveX(10, 1);
TweenParams myParams = new TweenParams();//设置myParams后
myTween.SetAs(myParams);如果补间一开始,则不起作用
SetAutoKill(bool autoKillOnCompletion = true)——设置自动销毁
SetEase(Ease easeType \ AnimationCurve animCurve \ EaseFunction customEase)——设置补间曲线,更改比如缓变过程怎样变换等SetLoops(int loops,LoopType loopType = LoopType.Restart)——设置循环
剩余可以查看文档