DOTweenの処理を強制的に終了するには、Kill メソッドを実行します。
この処理を実行することで、今回であれば
Sequence によって組み立てられた移動処理を終了させることが出来ます。
ただし、
変数にDOTweenの処理を代入していない場合、動いている DOTween の処理を一時停止したり、再開したり、強制的に終了させる処理が実行できません。
この事態に対応するため、Tween 型の変数を宣言することで、
DOTweenの処理内容を変数に代入することが出来ます。
また List で用意することで、複数の Tween 型をまとめて管理することが出来ます。
Tween 型の変数に DOTween の処理を代入していることで、
DOTweenの処理を一時停止させたり、再開したり、強制的に終了させることが出来るようになります。
どのような場面で使用するかというと、無限ループの処理を終了させたり、処理を一時停止して、途中から再開したりできます。
今回の場合は、移動の処理に DOTween を利用しています。
仮に移動処理中に次の移動の処理命令が来てしまった場合、DOLocalMove メソッドが重複してしまい、正常な移動処理ができなくなる恐れがあります。
この状態を未然に防ぐためには、移動処理が残っている場合には前の処理を停止させて、新しい移動の命令のみを実行するように制御する必要があります。
そのためには、Tween 型の変数に移動の処理を代入しておく必要があるため、今回は Tween 型の List を用意して利用しています。
<この DOTween の処理を Tween 型の List に代入しておく>
// DOTween の処理を Sequence を利用して処理するため初期化
Sequence sequence = DOTween.Sequence();
// 最初に先頭のキャラの位置に移動する。この処理を List に追加
tweenList.Add(sequence.Append(partyMemberAnims[index].transform.DOLocalMove(Vector3.zero, 0.25f)
.SetEase(Ease.Linear)));
// その後で新しい位置に移動する。この処理を List に追加
tweenList.Add(sequence.Join(partyMemberAnims[index].transform.DOLocalMove(newPos * (index + 1), 0.25f)
.SetEase(Ease.Linear))
// 移動後、移動方向とアニメの同期をおこなう
.OnComplete(() =>
{
partyMemberAnims[index].SyncMoveAnimation(-newPos);
tweenList.Clear();
}));
<そうすることで、実行中の DOTween の処理を停止できる>
// 前の移動処理が残っている場合
if (tweenList.Count > 0) {
foreach (var tween in tweenList) {
// 停止する
tween.Kill();
}
tweenList.Clear();
}
DOTween は大変便利な機能ですが、非同期処理であるため、一度動き出してしまった処理は実行中には制御できない、ということを覚えておきましょう。
それを制御するためには、実行命令のタイミングで Tween 型の変数に代入しておくことで対応出来ます。こちらも合わせて覚えておきましょう。