如何使用 DOTween 的缓动函数为 Unity Time.timeScale 设置动画?

How do you animate Unity Time.timeScale using an easing function with DOTween?

我正在尝试使用 DOTween 的缓动函数来制作 Time.timescale 动画。

补间值本身似乎有效:

DG.Tweening.DOTween.To(value => Time.timeScale = value, 1, 0, 0.4f);

但是文档中提到的所有 SetX() 方法在这个 returns 对象上都不可用,虽然我发现我可以设置 timeScale 属性,但那里似乎没有办法为此补间使用缓动函数。

我错过了什么?

在我看来,您想通过逐渐减慢时间而不是立即停止来暂停执行,并且您想使用缓动方法。

要在 DOTween 上设置缓动,只需像这样通过链接添加缓动方法调用:

DG.Tweening.DOTween.To(value => Time.timeScale = value, 1, 0, 0.4f).SetEase(Ease.InCubic));

像这样将更多方法链接在一起,这会在每次更新调用时运行 Debug.Log:

DG.Tweening.DOTween.To(value => Time.timeScale = value, 1, 0, 0.4f).OnUpdate(()=>{ Debug.Log(Time.timeScale); }).SetEase(Ease.InCubic);

运行 这段代码表明 Time.timeScale 实际上并没有归零,可能是由于浮点精度错误;然而,使用 OnUpdate 链方法 Time.timeScale 一旦足够接近就可以被赋值为零:

DG.Tweening.DOTween.To(value => Time.timeScale = value, 1, 0, 0.4f).OnUpdate(()=>{ if (Time.timeScale < 0.001f) Time.timeScale = 0; }).SetEase(Ease.InCubic);

希望对您有所帮助!

想通了:

不幸的是,DOTween 中的所有 SetX() 方法似乎都是作为扩展方法实现的。这意味着如果您尝试通过指定完整类型而不是包括命名空间来使用 DOTween,那么这些方法根本不可用。

这个有效:

using DG.Tweening;
///
DOTween.To(()=> Time.timeScale, x=> Time.timeScale = x, 2, 0.4f).SetEase(Ease.InQuad).SetUpdate(true);

不起作用:

DG.Tweening.DOTween.To(()=> Time.timeScale, x=> Time.timeScale = x, 2, 0.4f).SetEase(DG.Tweening.Ease.InQuad).SetUpdate(true);