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会莫名地不见了
修改后的代码
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
时间: 2024-10-06 00:40:16