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);
}
这样也是正常播放的 不会一直循环下去!!!

浙公网安备 33010602011771号