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
  • 相关阅读:
    scrapy中selenium的应用
    Django的锁和事务
    redis
    【leetcode】187. Repeated DNA Sequences
    【leetcode】688. Knight Probability in Chessboard
    【leetcode】576. Out of Boundary Paths
    【leetcode】947. Most Stones Removed with Same Row or Column
    【leetcode】948. Bag of Tokens
    【leetcode】946. Validate Stack Sequences
    【leetcode】945. Minimum Increment to Make Array Unique
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/4047535.html
Copyright © 2011-2022 走看看