同一个transform连续调用DOtween时可能会导致GC频率增加

一个现象:
transform.DOLocalMoveX(x, deltaTime)
transform.DOLocalMoveY(y, deltaTime)

如上写法,对同一个transform连续调用DOtween时可能会导致GC频率增加(profiler中有观察到该现象);

改为
transform.DOLocalMove(v3, deltaTime) 之后GC频率大幅下降;

因为使用transform.DOLocalMoveX(x, deltaTime)和transform.DOLocalMoveY(y, deltaTime)时,每次调用都会生成新的Vector3对象。而在transform.DOLocalMove(v3, deltaTime)中,你直接使用了一个已有的Vector3对象,避免了额外的对象创建,从而减少了GC频率

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    这个问题的原因是在连续调用DOTween时,每个调用都创建了一个新的Tween对象,导致了频繁的垃圾回收。解决这个问题的方法是使用TweenParams来进行链式调用,减少Tween对象的创建。

    示例代码:

    var tweenParams = new TweenParams().SetUpdate(UpdateType.Normal, true);
    
    transform.DOLocalMoveX(x, deltaTime).SetAs(tweenParams);
    transform.DOLocalMoveY(y, deltaTime).SetAs(tweenParams);
    

    这样,使用一个TweenParams对象来设置更新类型和自动启动参数,可以减少创建Tween对象的次数,降低垃圾回收的频率。

    希望这个解决方案对您有帮助。如果您有任何其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^