zoukankan      html  css  js  c++  java
  • DoTween NGUI bug

    多次动画导致UISprite丢失

    DOTween动画进行时与UISprite有冲突,DOTween多次重复同一个动画时,UISprite会莫名的丢失

    UISprite动画代码

    CUIManager.Instance.OpenWindow(newCmd.UIName, newCmd.Args);
    CUIManager.Instance.CallUI(newCmd.UIName, (ui, _args) =>
    {
        CUIMask.Show(CUIMaskType.TransparentMask);  // 确保遮罩
        ui.transform.DOKill();
        ui.transform.DOLocalMoveFrom(ui.transform.localPosition + new Vector3(MOVE_ANIM_OFFSET, 0), UI_ANIM_TIME)
            //.SetEase(DG.Tweening.Ease.OutBack)
            .onComplete = CUIMask.Hide;
    
    });

    冲突表现

    DOTween的动画进行时,UISprite会莫名地不见了

    image

    UISPrite解决办法

    CUIManager.Instance.OpenWindow(newCmd.UIName, newCmd.Args);//打开窗口
            CUIManager.Instance.CallUI(newCmd.UIName, (ui, _args) =>
            {
                ui.transform.DOKill();
                var lastPos = ui.transform.localPosition;
                ui.transform.localPosition = ui.transform.localPosition + new Vector3(MOVE_ANIM_OFFSET, 0);
                var tweener = ui.transform.DOLocalMove(lastPos, UI_ANIM_TIME);
    
                tweener.OnComplete(CUIMask.Hide);
                
                // Fix: DOTween 与UISprite有一个冲突,DOTween进行时UISprite会莫名的丢失...强制DOTween进行中刷新uisprite
                tweener.OnUpdate(() =>
                {
                    foreach (UISprite sprite in ui.GetComponentsInChildren<UISprite>())
                    {
                        sprite.MarkAsChanged();
    
                    }
                });
    
            });

    在tweener的update函数中,让UISprite 执行rebuilt

    多次动画导致UILabel丢失

    DOTween 与UILabel也有同样的冲突,解决方法,同上面一样。

    多次动画导致UIPanel(Soft Clip)内容丢失

    当dotween的动画和Clipping为soft clip的UIPanel一起时,也有上述的bug

    image

    UIPanel解决方法

    启用再禁用panel

    //dotween 和soft clip panel 有bug
    public static void FixDotween_PanelsWrong (UIPanel[] panels)
    {
        foreach (var panel in panels)
        {
            if (panel.clipping == UIDrawCall.Clipping.SoftClip)
            {
                panel.enabled = false;
                panel.enabled = true;
            }
        }
    }
    
    //使用
    ui.Contain.DOLocalMove(endPos, UIAnimationTime)
    .SetEase(ShowEaseFunc)
    .OnComplete(() => FixDotween_PanelsWrong(panels));//fix bug
  • 相关阅读:
    这篇是Mark刚写的文档,原文为http://blogs.technet.com/markrussinovich/archive/2009/11/03/3291024.aspx
    自动加域批处理脚本[转]
    一次moveuser的使用经历[转]
    How to create fully custom Role, User, Event, Resource classes for use with the Security and Scheduler modules
    VBS脚本批处理创建域用户【可自动设置用户密码,创建OU】[转]
    eXpress App Framework Team
    客户端【脚本】自动加入域[转]
    XAF 如何控制自定义按钮的使用权限[转]
    How to make crossthread calls. (多线程操控窗体控件之不可行)
    改变TFS本地映射路径.
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/4047535.html
Copyright © 2011-2022 走看看