在Unity中,DOTween.timeScale是控制DOTween动画的时间缩放因子。将其设置为0会将动画暂停,导致Sequence的回调不被触发。这是因为DOTween的回调是根据时间来触发的,当时间缩放因子为0时,时间停止流动,因此回调不会被触发。

要解决这个问题,你可以考虑使用DOTween.Sequence().SetUpdate(true)来创建Sequence,这样可以将其设置为在Update中更新。然后使用Time.timeScale来控制整个游戏的时间缩放,而不是使用DOTween.timeScale。

以下是示例代码:

private Sequence mySequence;

void Start()
{
    mySequence = DOTween.Sequence().SetUpdate(true);
    // 添加Tween动画到Sequence中
    // mySequence.Append(...);
    // mySequence.Append(...);

    // 设置回调
    mySequence.OnComplete(() =>
    {
        Debug.Log("Sequence完成");
    });
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        Time.timeScale = 0; // 暂停游戏
    }
    else if (Input.GetKeyDown(KeyCode.R))
    {
        Time.timeScale = 1; // 恢复游戏
    }
}

这样,当你将Time.timeScale设置为0时,游戏会暂停,但是DOTween的Sequence回调仍然会被触发。

unity 里 DOTweentimeScale = 0 后会导致Sequence 的回调不被触发

原文地址: https://www.cveoy.top/t/topic/i5Yj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录