zoukankan      html  css  js  c++  java
  • 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更新自己的状态。
  • 相关阅读:
    Oracle Exadata和Exalogic利弊分析
    几个经常使用的正则验证
    開始开发 Dashboard Widget【翻译】文件夹
    j2ee 框架搭建所需jar包的作用
    【jQuery】复选框的批量处理:全选、非全选
    将 Android* x86 NDK 用于 Eclipse* 并移植 NDK 演示样例应用
    Socket connect error 99(Cannot assign requested address)
    解决w3wp.exe占用CPU和内存问题
    解决w3wp.exe占用CPU和内存问题
    解决w3wp.exe占用CPU和内存问题
  • 原文地址:https://www.cnblogs.com/wang-jin-fu/p/13509114.html
Copyright © 2011-2022 走看看