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会莫名地不见了
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
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