如何使用 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);
我正在尝试使用 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);