Unity NGUI Tween动画回调不执行问题

最近工作中遇到了一个问题

NGUI的Tween动画完成 回调函数 偶尔不执行

偶现Bug 今天我仔细看了下代码发现

    TweenPosition tempTween = varTar.GetComponent<TweenPosition>();
    if (tempTween == null)
    {
        Debuger.LogError("MainUITaskAward: Play() tempTween == null");
        return;
    }
    tempTween.ResetToBeginning();
    tempTween.PlayForward();

    EventDelegate.Callback del = delegate ()
    {
        if (tempTween != null)
        {
            Destroy(tempTween.gameObject);
        }
    };

    tempTween.SetOnFinished(del);

我是先执行的PlayForwar() 后SetFinished()

在程序卡的时候就会出现已经完成了动画 但是没有回调

修改后

        TweenPosition tempTween = varTar.GetComponent<TweenPosition>();
        if (tempTween == null)
        {
            Debuger.LogError("MainUITaskAward: Play() tempTween == null");
            return;
        }

        EventDelegate.Callback del = delegate ()
        {
            if (tempTween != null)
            {
                Destroy(tempTween.gameObject);
            }
        };

        tempTween.SetOnFinished(del);

        tempTween.ResetToBeginning();
        tempTween.PlayForward();
时间: 2024-12-30 10:53:12

Unity NGUI Tween动画回调不执行问题的相关文章

NGUI Tween动画Scale与Transform冲突

NGUI中我们要同时完成Scale与Transform的效果,会发现动画并不是同我们想的那样运行的. 原因就是Tween Scale与Tween Transform的冲突调用. Tween Scale中 用来设置localScale Tween Transform中 也用来设置localScale. 这就产生冲突了...这里最简单的方法就是把两个脚本合并一下删掉Tween Transform中的localScale,因为还是得用Tween Scale来控制Scale. using UnityEn

Unity NGUI TWEEN

大家都知道NGUI中自带了缓动(Tween),我一开始使用的时候,只能让他缓动1次.这里面有一个UIPlayTween可以帮你多次的运行Tween.当然,你可以借助DOTween , ITween等专业的第三方缓动插件.本篇文章只讲解: NGUI的Tween 首先对栗子进行一些简单的讲解: 主要是对"目标GO"进行位移操作 对于"目标GO"需要挂载:TweenPosition , UIPlayTween , 还有我自己的一个脚本 : TestTweenPos(只要是

【Unity NGUI游戏开发之二】TweenPosition位移动画(一):不相对于Anchor的位移动画

下面学些下NGUI的TweenPosition位移动画,一般的位移动画需求分为不想对于Anchor锚点的位移动画和相对于Anchor的位移动画(主要看是否考虑屏幕分辨率),下面介绍两种游戏中最常用的不相对于Anchor的TweenPosition用法: 用法1.NGUI的控件从PosA位置移动到PosB位置,播放动画 用法2.在游戏中需要动态创建带有TweenPosition组件动画的对象,对象创建.移动.到达指定位置.销毁的过程.eg.游戏中玩家吃金币,迟到金币后转换为分数,分数播放一个Twe

【Unity NGUI游戏开发之三】TweenPosition位移动画(二):相对于UIAnchor不同分辨率下的完美适配位移动画

Unity中的UI我们采用的是NGUI,NGUI的界面位移动画,我们一般使用的是TweenPosition. 一种是简单的相对位移,不考虑分辨率适配问题,只需要简单的从位置A到位置B,已经在文中介绍了: [Unity NGUI游戏开发之二]TweenPosition位移动画(一):不相对于Anchor的位移动画 另外一种是考虑到屏幕分辨率适配的位移动画,我们游戏中大多遇到的是这种情况. eg.我们想让一个UI从屏幕外沿着屏幕的左边移动到屏幕的中央,TweenPositon播放动画,在960*64

Unity3D 动画回调方法

最近发现很多coder.在用Unity开发游戏的时候都需要一个需求就是..动画播到某一帧就要干什么事情.而且希望能得到回调. 在unity里面的window菜单有个.Animation工具.打开它.然后会看到如下界面...选定你的游戏中选择模型动画.然后就会显示动画了. 标红的地方就是插入事件的地方.你可以用你的鼠标在时间上点一下就会有一条红线. 然后点这个标红的按钮就会显示如下的 窗口: 选择模型上的脚本函数就可以运行了.这里我的脚本Test2里面有个doJump函数.然后就会跑到那帧上面就会

5.NGUI Animation(动画)

(1)Animation(Unity自带动画编辑工具)   1. 为需要添加动画的组件添加Animation组件. 2.打开Animation窗口(Window-Animation) 3.点击红色按钮开始录制,点击Add Curve 添加动画. (分别代表位移,旋转,缩放)         6.保存动画,如果不需要自动播放动画,则把Animation组件勾选掉. 6.在Button上添加一个UIPlay Animation组件 7.       按照规则添加需要的表现方式. (2)     Tw

通过编码和xml文件两种方式实现tween动画

tween有四种动画效果:alpha(透明).rotate(旋转), translate(移动),scale(缩放); 可以通过硬编码和xml文件这两种方式来实现. xml实现: 第一步:在项目的res文件下面新建一个文件夹名字是anim(必须) 第二步:在anim文件夹下面新建新的xml文件,在xml文件中具体设置动画效果 第三步:在Activity中使用 AnimationUtils.loadAnimation(MainActivity.this,R.anim.xx);来获取. 1.alph

【Unity NGUI游戏开发之五】多分辨率下完美分布式协同开发

NGUI多分辨率下完美分布式协同开发:不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 NGUI多分辨率下完美分布式协同开发不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 开发问题 原因分析 案例 完美过程 案例分析 实现过程 开发问题: NGUI分布式开发中,用git管理资源,团队成员每人负责一个perfab,所有现对于屏幕大小的相对位置的perfab因为引用了perfab外的数据,导致perfab的Anchor锚点数据丢失,最后的perfab集成后,必须重新设置,导致开发成本大幅度

关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器

对于多量的.复杂的.有规律的控制器使用代码生成 动画状态代码控制 1:每个动画状态,比如进入状态,离开状态, 等都有可能需要代码来参与和处理,比如,进入这个动画单元后做哪些事情,来开这个动画单元后做哪些事情,为了解决这个问题,unity允许每个动画单元来绑定一个脚本代码,这个脚本代码必须继承于StateMachineBehaviour;2: 可以在动画状态的Add Behaviour上添加挂载一个脚本到动画状态;3: StateMachineBehaviour主要接口: (1)OnStateEn