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

时间:2015-09-22 02:14:23

标签: unity3d dotween

我正在尝试使用DOTween的缓动函数为Time.timescale设置动画。

补间值本身似乎有效:

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

但是文档中提到的所有SetX()方法都没有在返回的对象上可用,而我发现我可以设置timeScale属性,似乎没有任何方法可以使用这个补间的缓动函数。

我错过了什么?

2 个答案:

答案 0 :(得分:4)

想出来:

不幸的是,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);

答案 1 :(得分:1)

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

要在DOT之间设置一个缓动,只需通过链接添加Ease方法调用:

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

将这样的更多方法链接在一起,这会在每个Update调用上运行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);

我希望这有帮助!