zoukankan      html  css  js  c++  java
  • unity ngui onFinished.Clear()失效

    今天在项目中遇到一个有意思的事情。有个需求是TweenAlpha动画。先调用隐藏动画后再调用一个方法,紧接着调用显示动画。代码如下:

      private void PlayAnim(bool show) { 
          TweenAlpha anim = transform.GetComponent<TweenAlpha>();
          if(anim != null){
                anim.from  = bg.alpha;
                anim.to = show ? 1f : 0f;
                anim.onFinished.Clear();
                if(show == false){
                    anim.onFinished.Add(new EventDelegate(AnimCallBack));
                }
                anim.ResetToBeginning();
                anim.PlayForward();
                anim.enabled = true;
            }
        }
    
        public void AnimCallBack() { 
            PlayAnim(true);
        }
    

      当我调用PlayAnim(false);的时候  这个动画就开始一直在循环播放。一直不会停!!!(此类情况,只是出现在动画播放回调里面又调用该动画播放才会出现这种情况!!!  我用的是unity5.5.1.查了下源码。其实是因为里面还有个mTemp没有清空的原因)。

      但是当我修改了一下上面的代码。动画又正常了。按照我想的去播放了

        private void PlayAnim(bool show) { 
            TweenAlpha anim = transform.GetComponent<TweenAlpha>();
            if(anim != null){
                anim.from  = bg.alpha;
                anim.to = show ? 1f : 0f;
                anim.onFinished.Clear();
                if(show == false){
                    anim.onFinished.Add(new EventDelegate(AnimCallBack));
                }
                anim.ResetToBeginning();
                anim.PlayForward();
                anim.enabled = true;
            }
        }
    
        public void AnimCallBack() { 
            Invoke("Anim_Show", 0.001f);
        }
    
        public void Anim_Show() { 
            PlayAnim(true);
        }
    

      或者

      private void PlayAnim(bool show) { 
            TweenAlpha anim = transform.GetComponent<TweenAlpha>();
            if(anim != null){
                anim.from  = bg.alpha;
                anim.to = show ? 1f : 0f;
                if(show == false){
                    anim.OnFinishAction = AnimCallBack;
                } else { 
                    anim.OnFinishAction = null;
                }
                anim.ResetToBeginning();
                anim.PlayForward();
                anim.enabled = true;
            }
        }
    
        public void AnimCallBack() { 
            PlayAnim(true);
        }
    

      这样也是正常播放的   不会一直循环下去!!!

    或者

      private void PlayAnim(bool show) { 
            TweenAlpha anim = transform.GetComponent<TweenAlpha>();
            if(anim != null){
                anim.from  = bg.alpha;
                anim.to = show ? 1f : 0f;
                if(show == false){
                    anim.onFinished.Add(new EventDelegate(AnimCallBack));
                } else { 
                    anim.RemoveOnFinished(new EventDelegate(AnimCallBack));
                }
                anim.ResetToBeginning();
                anim.PlayForward();
                anim.enabled = true;
            }
        }
    
        public void AnimCallBack() { 
            PlayAnim(true);
        }
    

      

    这样也是正常播放的   不会一直循环下去!!!

  • 相关阅读:
    MSP430:输入捕获
    MSP430:串口输出
    测试输出时钟频率
    C# MySql Select
    C# MySql 连接
    MSP430:PWM产生
    MSP430:定时器学习TimerA
    MSP430:中断简介
    MSP430 PIN 操作寄存器
    剑指offer---包含min函数的栈
  • 原文地址:https://www.cnblogs.com/Colored-Mr/p/8577282.html
Copyright © 2011-2022 走看看