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)
——设置循环
剩余可以查看文档