多次動畫導致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