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
  • 相关阅读:
    safari兼容时间格式 NAN
    高阶组件
    SqlBulkCopy与触发器,批量插入表(存在则更新,不存在则插入)
    SQL Server 触发器
    浅谈数据库中的触发器
    SQL Server 2008 表变量参数(表值参数)用法
    SQL Server 批量插入数据的两种方法
    SQL Server 2008 R2 主从数据库同步
    C#操作FTP, FTPHelper和SFTPHelper
    orcherd 汉化
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/4047535.html
Copyright © 2011-2022 走看看