首页 > 代码库 > DoTween UISprite bug

DoTween UISprite bug

DOTween 与UISprite有一个冲突,DOTween进行时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

修改后的代码

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

DoTween UISprite bug