Dotween

在这里插入图片描述

transform.DOMove(Vector3.one, 2); // 移动到目标位置,时长为2秒
transform.DOScale(2, 2); //扩展到目标 Scale , 时长为2秒
transform.DOPunchPosition(transform.forward,2); //让物体在目标位置之间来回移动,时间结束后,停止移动,就像被一拳打倒墙上一样,
transform.DOShakePosition(2,5,45,10); //震动的效果,(时长,震动强度,频率,角度),
transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 3);
transform.DOBlendableMoveBy(new Vector3(2, 2, 2), 3);

混合Move(),使用之后会将混合树里面所有的向量相加,得到一个目标向量,再使目标移动到目标位置
,如果混合树里只有一个向量,那么会返回这个向量

改变物体透明度的两种方式

mMat = GetComponent<MeshRenderer>().material;
mMat.DOColor(Color.clear, 2);
mMat.DOFade(0,2);

第一种,是让材质的颜色清空,
第二种,设置一个目标Alpha值,下一个参数是时间,物体会随时间渐变到目标透明值

mMat.DOGradientColor(mGradient, 3);

声明一个公共的渐变器,使用此函数可以令渐变器在3秒中内变化

mMat.DOOffset(new Vector2(1, 1), 2);

此函数可以改变物体材质贴图的偏移量,可以用于创造水流动的效果,2秒中让物体贴图偏移到目标位置
修改物体的透明值,

        mMat.DOColor(Color.clear, 2);
        mMat.DOFade(0, "_Color", 2); //这种方式更好

如果DoClolr有两个,那么只会执行最后面的那个,之前的都不会执行

  mMat.DOColor(Color.red, 2);
    mMat.DOColor(Color.green, 2);

那么物体会直接变成,绿色,
如果使用的是混合方式,

mMat.DOBlendableColor(Color.black,2);
mMat.DOBlendableColor(Color.white,2);

程序将会和 moveBlend一样,会将两种颜色进行混合, 返回一个中间值,再变化

Camera

mCamera.DOAspect(1, 2);

可以改变摄像机的比例在这里插入图片描述
同理还有

mCamera.DONearClipPlane(1.1f, 2);
mCamera.DONearClipPlane(5f, 2);

对摄像机照射到的远近进行控制
在这里插入图片描述
Field of view 视域,对摄像机照射的大小进行控制
在这里插入图片描述在这里插入图片描述在这里插入图片描述对于正交摄像机则使用

mCamera.DOFieldOfView(10, 2); // 透视摄像机的视域
mCamera.DOOrthoSize(10, 2);//正交摄像机的size

对摄像机的分屏操作

mCamera.DORect(new Rect(0.5f, 0.5f, 0.5f, 0.5f), 2);
mCamera.DOPixelRect(new Rect(0, 0, 300, 400), 2);

5个参数,前面两个指定位置,后两个指定摄像机的size ,第一种函数使用的是比例的方式,第二种是指定的具体数值,最后一个参数是转换的时间

Text
打字机效果,让Text以某种速度打印出一行字符串

mText.DOText("你醒啦", 1f).SetEase(Ease.Linear);

输入想输出的字符,然后以 Ease.Linear 的方式用一秒的时间输出

运动序列的使用方法

让doTween中的动作一次执行,不像上述方法一样直接到达目标点

Sequence sequence = DOTween.Sequence();
sequence.Append(mText.DOText("你醒啦", 2f));  0-2
sequence.Append(mText.DOText("", 0.5f));  2-2.5
sequence.AppendInterval(1f);   2.5-3.5
sequence.Append(mText.DOText("我等你很久了", 2f));    3.5-5

首先创建一个 Sequence (序列),然后给此序列 传递需要执行的函数,跟委托一样,接着队列会依次执行上传的方法,

sequence.Insert(float atPosition, Tween t);

尤其注意这个拆入方法, 第一个参数指的是插入的时间顺序,不是序列顺序.
以上述为例,如果参数是 (2,t) ,那么该序列会在队列执行到第二秒的时候插入一个 Tween 的动作,等这个动作执行完毕后,才会继续执行后面的动作,加入这个动作的持续时间为 1 秒,那么序列将会在,第2秒的时候插入一个时间为1秒的动作.
Join(Tween t)和 Append(Tween t)类似,可以在任意地方插入想要的动作
Append 是队列形式存储, 先进先出,
Prepend 以栈形式存储,先进后出,后进先出,

Sequence se = DOTween.Sequence();
se.Append(transform.DOMove(Vector3.left, 2));  //左走    3
//se.Join(transform.DOScale(Vector3.one * 2, 1));   4
se.AppendInterval(1f); //停止一秒   5
//se.Join(transform.DOScale(Vector3.one, 1));   6
se.Append(transform.DOMove(Vector3.down, 2)); //下走   7

///se.Insert(1, transform.DOScale(Vector3.one * 2, 1));
///se.Insert(4, transform.DOScale(Vector3.one, 1));

se.Prepend(transform.DOMove(Vector3.up, 2));       2
se.Prepend(transform.DOMove(Vector3.up, 2));       1

将prepend加入到序列的最后面,则程序会从 prepend 1-> 2 开始,然后再从上往下执行,

回调函数的使用

可以让我们监督每一个行为是否完成

se.AppendCallback(CallBack2);
se.InsertCallback(2,CallBack1);
se.PrependCallback(callBack3);

注意Prepend 会在Prepend 的行为执行完之后再执行

DoTween支持链式编程,链式编程就是指可以对一个方法,反复的 进行 ,Function().Function1() .等等方法的编程
第一种循环方式

transform.DOMove(Vector3.one, 1f).SetLoops(3,LoopType.Incremental);
transform.DOMove(Vector3.one, 1f).SetLoops(3,LoopType.Incremental).SetEase(Ease.Linear);

SetLoops();第一个参数是循环的次数,参数为-1时,指无限循环,第二个参数为循环方式
looptype有三种方式:

  • Incremental-递增,重复执行此行为
  • Restart- 跟 Mathf.Repeat()一样,物体到达目标点之后,回到Local原点,再前往目标点,依次循环
  • Yoyo顾名思义,悠悠球,跟Mathf.Pingpong()差不多,物体到达目标点后,从目标点出发,向Local原点前进,依次循环,需要注意的是,Yoyo如果不是无限循环的话,那么物体从原点到目标点,算一次循环,从目标点到原点,算一次循环,
    第二种设置循环的方式
        TweenParams tp = new TweenParams();
        tp.SetLoops(3, LoopType.Restart);
        transform.DOMove(Vector3.one, 2).SetAs(tp);

SetAutoKill() - 自动销毁此行为,节省内存资源,一般情况下,行为并不会被自动销毁
可以在某些只使用一次的行为上加上 SetAutoKill() 方法进行处理

   transform.DOMove(Vector3.one, 1f).From(true);

From() - 将一个 To Tween 转变为一个 From Tween,将当前目标的位置设置为渐变的结束值,然后立即将目标发送到先前设置的结束值。

transform.DOMove(new Vector3(10, 10, 10), 1f);
//从当前位置到目标位置
transform.DOMove(new Vector3(10, 10, 10), 1f).From();
//从目标位置到当前位置
transform.DOMove(new Vector3(10, 10, 10), 1f).From(true);
//将当前位置加上目标位置,得到一个相对位置,从相对位置到当前位置

SetDelay() - 设置动画的延时时间 ,参数是时间
在动画运行过程中,也可以用速度来控制动画的播放,而不是基于时间播放动画

transform.DOMove(new Vector3(10, 10, 10), 1f).SetSpeedBased(true);

当SetSpeedBase(false),或者SetSpeedBase()的时候,1f 表示时间
当SetSpeedBase(true)的时候, 1f 表示速度
SetID(id) . 可以这个动画添加一个ID,可以是数值,也可以是字符串或者其它
需要使用这个动画的时候,

   DOTween.Play(id);

SetRecyclable() 设置为可回收对象,当对象被销毁后,允许垃圾回收
SetRelative(true) 对象会进行增量运动,假设物体在 Vector3.one 的位置,目标点也是 Vector3.one ,则对象不会进行移动,

transform.DOMove(new Vector3(10, 10, 10), 1f).SetRelative(true);

则物体会进行增量运动, 移动到 (2,2,2)的位置

transform.DOMove(new Vector3(10, 10, 10), 1f).SetUpdate(UpdateType.Normal,true);

设置行为的帧类型,如果为True的话,那么dotween不受 Unity Time.Scale 影响

transform.GetComponent<MeshRenderer>().material.DOColor(Color.red, 2).SetEase(Ease.Flash, 10, 0);

设置运动曲线需要用SetEase方法,Flash ,是闪烁的效果,
SetEase参数分别为 曲线类型,振幅, 周期(-1,0,1)
Unity可以自定义运动曲线,

public AnimationCurve m_Ac;
transform.DOMove(new Vector3(10, 10, 10), 2).SetEase(m_Ac);
  • Dotween的回调
    OnComplete() ,Tween完成后触发
    OnKill() ,Tween被杀死后触发
    OnPause() ,Tween被暂停后触发
    OnPlay() ,Tween 暂停后,被Play后触发
    OnStepComplete() 如有循环,则循环一次触发一次
    OnRewind() 倒回,重置动画结束的时候触发
    OnUpdate() 如想在动画执行的过程过同时执行另一个动画,
    OnWaypointChange()
    OnStart() ,动画开始时调用,不管循环多少次,只调用一次

  • 控制函数的使用方法

transform.DORestart(); //让动画重新播放
transform.DORewind(); //让动画回到原点
transform.DOSmoothRewind(); //让动画平滑回到原点
transform.DOPlay(); //让所有动画播放
transform.DOPlayBackwards();//让动画回放
transform.DOPlayForward(); //让动画前放
transform.DOFlip(); //让动画翻转,起点变目标点,目标点变原点
transform.DOGoto(1, false); //第一个参数表示跳转的时间点,第二个参数表示是否播放动画
transform.DOTogglePause(); // 跟开关一个意思
  • 类方法介绍
    DOTween.PausedTweens(); 返回所有暂停的动画,没有则返回null
    DOTween.PlayingTweens(); 返回所有正在播放的动画,没有则返回null
    DOTween.TweensById(“id”, true); 返回正在True播放状态的ID的动画
    DOTween.TweensByTarget(transform, true); 返回正在播放的某个对象(Transform ,Material . . .)的动画
    DOTween.IsTweening(transform); 返回一个bool值,判断某个对象是否正在执行
    DOTween.TotalPlayingTweens(); 统计正在播放的动画,延时的也算
        Tween t = transform.DOMove(new Vector3(10, 10, 10), 5);
        t.fullPosition = 3;

fullPosition 属性,表示动画的执行时间,可以修改与读取,修改之后,动画将直接跳跃到修改后的数值
tween.Delay(); 获取当前动画的延迟时间
tween.Duration(bool b) ,获取动画的持续时间,b 为true 时,包含循环时间,返回 (次数 * 时间)
false时不包含循环,返回具体的动画执行时间 , 返回 (时间)
tweener.Elapsed(bool b) 返回动画完成的时间 ,也有一个是否包含循环的bool值
tweener.ElapsedDirectionalPercentage() 返回动画进度的百分比,不包含循环,只使用一次
tweener.ElapsedPercentage(bool b) ,带参数,表示是否包含循环
还有一些判断状态的方法 isAcrive,isPlaying 等等

DoTween 跟 Unity 的协程进行合作,可以进行回调的操作,比如

        yield return tween.WaitForCompletion(); //等待动画全部完成之后
        yield return tween.WaitForElapsedLoops(2); //等待动画循环两次之后
        yield return tween.WaitForKill(); //等到动画被杀死之后
        yield return tween.WaitForPosition(1); //等待动画播放1秒之后
        yield return tween.WaitForRewind(); //等待动画重置之后
        yield return tween.WaitForStart(); //等待动画开始之后

DoTween 里面所有 position 指的都是时间对象,不是具体的坐标值

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值