• NGUI 动画系统:UITweener


    UITweener:动画系统基类,计算动画的进度值,update处理。
    基类UITweener属性方法:
    UITweener:动画组件基类,通过enabled控制动画的开始结束
            Begin-enable-Update-DoUpdate-Sample
            property:
            method:轨迹,例如透明度线性变化、递增变化等
            style:循环方式,单次不循环、循环(头-尾,头-尾)、PingPong(头-尾,尾-头)
            animationCurve:渐变轨迹
            ignoreTimeScale:游戏暂停时,是否继续播放动画
            delay:启动延迟,Play后几秒开始动画
            duration:动画持续时间,不包括delay时间
            
            mStarted/mStartTime:动画运行时属性,是否开始、开始事件
            mAmountPerDelta:每帧播放进度,1/duration
            mFactor: mFactor += amountPerDelta * delta,当前动画播放的进度,这边值的正负代表方向
     
            function:
            DoUpdate:计算factor,然后根据style修正mFactor,计算动画是否结束,调用Sample
            Sample:针对Method类型修正最终的进度值,通过OnUpdate把factor进度、isFinished通知子类
    核心方法OnUpdate:
    Sample:最终通过虚函数的OnUpdate通知子类
    播放动画
    1.PlayForward、PlayReverse、Play成员方法,只修改mAmountPerDelta,会调用到DoUpdate。
    2.Begin静态方法,用于给一个GameObject动态挂载动画,如果指定动画类型组件不存在,会动态AddComponent。这边的style默认设置成了不循环Style.Once。
    TweenAlpha:透明度动画。
    1. 重写Begin方法,该方法会调用父类的Begin,并返回一个TweenAlpha。
    1. 重写OnUpdate虚方法,在该方法了对value赋值,value = Mathf.Lerp(from, to, factor)。
    1. value赋值。
    public float value
    {
       set
       {
          if (!mCached) Cache();
     
          if (mRect != null)
          {
             mRect.alpha = value;
          }
          else if (mSr != null)
          {
             Color c = mSr.color;
             c.a = value;
             mSr.color = c;
          }
          else if (mMat != null)
          {
             Color c = mMat.color;
             c.a = value;
             mMat.color = c;
          }
          else if (mLight != null)
          {
             mLight.intensity = mBaseIntensity * value;
          }
       }
    }
    透明度更新步骤:
    1.动画开始播放后,UITweener会在Update里每帧调用DoUpdate。
    2.DoUpdate会初步计算当前进度值mFactor和动画状态,在调用Sample根据method值修正mFactor。
    3.通过OnUpdate通知子对象根据mFactor更新自己的状态。
  • 相关阅读:
    201521123055 《Java程序设计》第7周学习总结
    201521123055 《Java程序设计》第6周学习总结
    201521123055 《Java程序设计》第5周学习总结
    201521123055《Java程序设计》第1周学习总结
    201521123055 《Java程序设计》第2周学习总结
    Qt 学习:数据库操作
    Attempting to add QLayout "" to MainWindow "", which already has a layout
    C++所有符号
    QT中QWidget、QDialog及QMainWindow的区别
    C++ > 类(Classes)的定义与实现
  • 原文地址:https://www.cnblogs.com/wang-jin-fu/p/13509114.html
Copyright © 2020-2023  润新知