问题描述
我正在尝试运行 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 ()
。