• DoTween学习笔记


    using DG.Tweening;
     
    Tweener
    首先dotween在游戏刚开始运行时会默认进行一次初始化
    DOTween.Init();
    如果为了有更好的效率,可以手动控制最大同时进行dotween动作的执行数量,
    DOTween.Init(true,true,LogBehavior,Verbose).SetCapacity(200,10);  //200个是tween补间动作,10是squence
     
    有三种方式创建tweener动作
    1: DOTween.To(getter,setter,to,float duration)
    getter, 数值补间动作返回值   setter,数值补间动作的设置值, to 是目标的数值, duration是补间动作的时长
     
    getter,和setter的变量一致, 利用lambda表达式来设置
    ()=>变量A ;  x=>变量A=x
     
    如:  float myFloat;   //定义一个float
     
    void Start()
    {
    DOTween.To(()=>myFloat, x=>myFloat=x, 10f,1f);   //让myfloat在一秒内,从myfloat当前值过度到10;
    }
     
      DOTween.To(setter,from, to,float duration)    //另一种写的方法, 只写setter,定义 数值的开始和结束值
     
    void Start()
    {
    DOTween.To(x=>myFloat=x, -10f,10f,1f);   //让myfloat在一秒内,从-10过度到10;
    }
     
    此外还有DOTween.Punch();   //摇晃数值到初始值
    //方法原型  
    public static TweenerCore<Vector3, Vector3[], Vector3ArrayOptions> Punch(DOGetter<Vector3> getter, DOSetter<Vector3> setter, Vector3 direction, float duration, int vibrato = 10, float elasticity = 1);

    //参数1:getter 参数2:setter 参数3:enPos 参数4:duration时间 参数4:晃动的次数 参数5:晃动的幅度
    DOTween.Punch(() => myValue, x => myValue = x, new Vector3(100, 100, 100), 3,1,100);

     
    DOTween.shake();   //颤抖数值
     
    DOTween.ToArray()     //数值集合间过度
    如 
    Vector3[] endValues = new[] { new Vector3(1,0,1), new Vector3(2,0,2), new Vector3(1,4,1) };
    float[] durations = new[] { 1, 1, 1 };
    DOTween.ToArray(()=> myVector, x=> myVector = x, endValues, durations);
     
    DOTween.ToAlpha()    颜色alpha过度
    DOTween.ToAxis();      过度变换 vector3中的某一轴数值
    如:
    DOTween.ToAxis(()=> myVector, x=> myVector = x, 3, 1);   //始终变换x轴的数值到3,在一秒内
     
    DOTween.ToAxis(()=> myVector, x=> myVector = x, 3, 1, AxisConstraint.Y);   //1秒内变换myVector 到(myVector.x,3,myVector.z)
     
     
     
    2: 组件后缀形式    (特点是前缀加DO  :DOMove  ,DOScale)
    tranform.DOMove(targetVector3, durationTime, isSnap);   //这是从当前位置值移动到目标值
    tranform.DOMove(targetVector3, durationTime, isSnap).From();  //这是从targetVector3
    值作为起点,移动到当前位置值
     
    tranform.DoMove和rigidBody.DoMove.  功能相同;都是移动到目标距离
    3 :针对不同组件的属性数值有对应的dotween补间动作值
     
    如:audiosource.DOFade(targetVolume,durationTime);//是将声音值过度到对应值
     
     
    sequence 
    就像动画编辑器一样,在时间轴上布置dotween 动作
    布置动作的API有 Append (tweener) AppendCallBack(方法)   
    AppendInterval(间隔时间)序列结尾增加间隔时间      
    以及PreAppend(tweener) 开头位置 插入 一个tweener
     PreAppendInterval (time)   开头位置插入一个空隙时间  
     
    Insert(插入时间,tweener)  无视序列顺序, 同步进行 
    InsertCallBack();
     
    sequence的总时间 sequence.Duration();
     
    如 void Start()
    {
    Sequence mySequence=DOTween.Sequece();  //定义一个sequence
    mySequence.Append(transform.DoMoveX(3f,1f));   //x轴一秒内移动到3
    mySequence.AppendInterval(2f);  //延迟2秒
     
    mySequence.AppendCallback(()=>Debug.log("2秒后.."));  //两秒后调用一个回调函数
     
    mySequence.PreAppend(tranform.DoScale((5f,5f,5f),1f));  //开头插入1秒内一个缩放到(5,5,5)的补间动作
    mySequence.PreAppendInterval(1f);//序列开头插入1秒的等待时间
     
    mySequence.Insert( 2f, Renderer.Material.DoColor(Color.Green,5f) );   //在序列第二秒插入一个并行的补间动作: 5秒内材质变换成绿色;
    }
     
     
     
    Chained Setting   代码链式设置    tweener后可以跟随无限个以下方法
    如: myTweener.SetEase().SetRelative(true).OnComplete()......;
     
    Tweener.SetAs(tweener);   复制设置数值到新的tweener
    .SetAutoKill(false)  结束时禁止销毁    适用于经常使用的情况
    .SetEase(Ease.Liner)  过度方式
    .SetLoop(int 次数,LoopType)
    .SetRecycle()   重复利用   不同于SetAutoKill,它会被其他tweener发起者调用
    .SetRelative();   相对数值,结束值变成了开始值+结束值  如(1,1f) 移动到1,relative为true后 变成 移动当前数值+1
    .SetUpdate(UpdateType, bool isIndenpendant);  update模式, 以及是否受unityENgine的timescale影响  默认false  受影响    尽量不用 fixed 一旦 timescale为0,就没有补间动画
     
    Chained Callbacks
    .OnComplete(方法)   补间动画结束调用方法
    .OnKill()
    .OnPlay()
    .OnPause()
    .Rewind()
    .OnStart()
    .OnUpdate()
    OnWayPointChange()
    .OnStep();
     
    特殊后缀
    .From(bool isRelative)   isRelative 真时, 起始位置为 endPos +StartPos
    .SetDelay()
    .SetSpeedBased  速度  需要 SetEasy.liner   
     
     
     
    字幕的渐显效果
     
    string zimu;
    DOTween.TO(()=>zimu,x=>zimu=x, "要显示的台词",durationTime).setOption(true,scrambleMode)  ;     //是否使用richtext,以及混乱变换字符
     
     把补间动作设置内容保存成对象,  用setAs(),来调用,方便全局调试
     
    TweenParams tParms = new TweenParams().SetLoops(-1).SetEase(Ease.OutElastic);
    // Apply them to a couple of tweens
    transformA.DOMoveX(15, 1).SetAs(tParms);
    transformB.DOMoveY(10, 1).SetAs(tParms);
     
    控制补间动画
    1
    DOTween.pauseAll();  //停止所有补间动画
    DOTween.Pause(id) ;//停止制定id的补间动画    id设置     tweener.SetId(object);
    DoTWeen.Pause(组件)  //停止组件上的所有补间动画
     
    2
    tweener.Pause();
     
    3
    myTransform.DOPause();    //组件快捷方式前缀加DO
     
     
    所有控制补间动画的API    (组件后缀名称前缀加DO)     如DOTween.Pause(id)   myTransform.DOPause();
     
    Complete/ALL //立即播放到结尾
    Flip/All  //反转播放顺序
     
    Play/All 
    Pause/all
     
    PlayForward/All
    PlayBackward/all
     
    Goto/all   //在某处时间播放
     
    Kill/all   //立即销毁tweener ,即使setAutoKill(false)
     
    Restart//all
    Rewind/all    //和restart 区别是 rewind起始位置不播放
     
    TogglePause/all   //play和pause状态间切换
     
    根据状态获得tweener
     
    DOTween.PausedTweens();  //获得所有暂停的tweener
     
    DOTween.PlayingTweens();
     
    DOTween.TweenById(object id, bool playingOnly=false);
     
    DOTween.TweenByTarget(object target,bool playingOnly=false) //根据组件获得其tweener
     
    DOTween.IsTweening(object idor Target) :bool   //目标是否tweening
     
    DOTween.TotalPalyingTweens():int   //全部正在播放的tweener个数
     
    tweener实例的状态
     
    myTweener.fullPosition   //全部播放的时间  包括循环和延迟
     
    myTweener.completedLoops  //以及循环的次数
    myTweener.Delay();   //获得延迟的时间    myTweener.SetDelay(2f)  是指延迟的时间
     
    myTweener.Elapsed(bool includeLoops=true);  //已经播放过的时间
    .ElapsedPercentage();
    myTweener.Duration(bool includeLoops=true);   //补间动画的时长,不包括延迟的时间
     
    myTweener.IsActive();
    myTweener.IsBackWard();
    myTweener.IsComplete()
    myTweener.IsPlaying()
    myTweener.loops();
     
     
    异步协程
    yield return myTween.WaitForCompletion();  //等待tweener结束
     
    yield return myTween.WaitForElapsedLoops(2) //等待两次循环后
     
    WaitForKill()  //等待销毁后
     
    waitForPosition(0.5f)  //等待时间位置在0.5秒后
     
    waitForRewind //等待重播
    waitForStart()  //等待开始    有延迟的情况
     
     
    改变tweener的动画起始和结束值
     
    tweener.ChangeEndValue(newEndValue,float duration=-1,bool keepStartValue)  //keepStartValue 为真时,当前值设为开始值  ,duration值大于0,则重设补间时间
     
    tweener.ChangeStartValue(newStartValue,float duration=-1)
     
    tweener.ChangeValue(newStartValue,newEndValue,float duration=-1);
     
     
    DOTVirtual    实用的方法
     
    DOTVirtual.Float(float from,float to,float durationTime, Callback);
     
    DOTVirtual.Float(-10f,10f,1f,x=>Debug.log(x));     //一秒内从-10到10, 并每帧打印当前过度值
     
    DOTVitual.DelayedCall(float delayTime, Callback, bool isIgoreTimeScale=true)   
    DOTVitual.DelayedCall(1f,()=>Debug.log("1秒后"));   //延迟一秒后调用指定回调函数
  • 相关阅读:
    数据库事务4种隔离级别及7种传播行为
    Spring AOP深入剖析
    SQL语句-创建索引
    global文件中的application_start方法中做: 定时器
    细说ASP.NET Forms身份认证
    asp.net(C#)实现功能强大的时间日期处理类完整实例
    C# 文件操作类大全
    SQL Server Profiler:使用方法和指标说明
    分库分表原则 总结
    做软件与团队建设——对带研发团队和管理的总结
  • 原文地址:https://www.cnblogs.com/kanekiken/p/7536881.html
Copyright © 2020-2023  润新知