杀死当前的 DoTween 序列

问题描述

我正在尝试运行 DoTween 并且它运行良好,但是当我想停止它时,它根本没有停止,它会一直运行直到完成。我正在使用 DoTween 序列来杀死它,但不知何故它不起作用。有什么问题?

public float prevValue = 0;
Sequence mySequence = DOTween.Sequence ();

    private void Update () {
        UpdateSlider ();
        if (Input.GetKeyDown (KeyCode.T)) {
            LerpToThis (90);
        } else if (Input.GetKeyDown (KeyCode.Z)) {
            KillSequence ();

        }
    }

 public void LerpTovalue (float newValue) {
        float myValue = prevValue;

            DOTween.To (() => myValue,x => prevValue = x,newValue,3.0f);

    }

    public void KillSequence () {
        mySequence.Kill ();
    }

解决方法

除了您的代码使用未声明的变量(如 ShouldLerp_)并且按下“T”时,您会调用与摘录中显示的方法不同的方法,我假设您的 LerpToThis 调用也可以使用 DOTween.To 进行补间,但是当您尝试停止补间时,您会调用 mySequence.Kill(),即使该序列不是进行补间的事情。所以这就是补间不停止的原因。

根据 Kill() 调用的结果调用 DOTween.To(),或者给该补间一个 Id 并改为调用 DOTween.Kill(id)

,

frankhermes 已经说了所有,我只是详细阐述一下解决方案:

LerpToValue 方法中,您使用线条创建一个 Tween

DOTween.To(() => myValue,x => prevValue = x,newValue,DurationFading);

方法 DOTween.To 确实返回一个 Tween 类型的对象,您可以在该对象上调用 Kill,即首先向类添加声明

private Tween myTween;

然后在 LerpToValue 中创建补间时将其存储

myTween = DOTween.To (() => myValue,DurationFading);

最后,在 KillSequence(您将要重命名,因为正如坦率所说,没有使用序列)您调用

myTween.Kill();

您可以完全摆脱 DOTween.Sequence ()