(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



DOTweenのTweenerを使って途中終了、 一時停止、再開、リスタート【Unity】【DOTween】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2018.4.20f1
DOTween Pro 1.0.178


はじめに

Unityで位置や大きさなどのアニメーション、

いわゆるTweenを実装するアセットとしてお馴染みのDOTween

DOTween Pro | Visual Scripting | Unity Asset Store


今回はそのDOTweenで途中終了、 一時停止、再開、リスタートする方法の紹介です。

イメージとしては以下のような感じ。

f:id:kan_kikuchi:20200528193329g:plain


なお、記事中では以下のアセットを使っています。

Animals - Simon the Raccoon | 3D Animals | Unity Asset Store



Tweener

まず、DOTweenはDOMove等を実行した時にTweenerCoreが返り値として取得出来ます。

//DOMove実行と同時に返り値としてTweenerCoreを取得
TweenerCore<Vector3, Vector3, VectorOptions> tweenerCore = transform.DOMove(new Vector3(4.4f, -0.5f, -4.7f), 5f);


このTweenerCoreを使って、途中終了等を実装していくわけなんですが、

TweenerCoreの引数は各処理によって変わるため、基本的には

TweenerCoreの継承元であるTweenerで取得すると使い勝手が良いです。

//DOMove実行と同時に返り値としてTweenerを取得
Tweener tweener = transform.DOMove(new Vector3(4.4f, -0.5f, -4.7f), 5f);


さて本題の途中終了、 一時停止、再開、リスタートの実装方法ですが、

なんと以下のように先程出てきたtweenerの各メソッドを実行するだけ。

//途中終了
tweener.Kill();

//一時停止
tweener.Pause();
  
//再開(もしくは実行)
tweener.Play();
  
//リスタート(最初から再生)
tweener.Restart();


例えば以下のようにアライグマがDOMoveで移動後、アニメーションを変更するような場合

//手前に向かって歩いてきた後、座るアニメを実行
Tweener tweener = transform
  .DOMove(new Vector3(4.4f, -0.5f, -4.7f), 5f)
  .OnComplete(() => {
    GetComponent<Animator>().CrossFade(Animator.StringToHash("Sit"), 0.5f);
});
f:id:kan_kikuchi:20200528191402g:plain


途中終了(Kill)、 一時停止(Pause)、再開(Play)、リスタート(Restart)を実行してみると以下のような感じ。

ただし、一時停止の時にAnimatorを無効にし、再開時に有効にしています。

f:id:kan_kikuchi:20200528191524g:plain


なお、Killの引数(complete)をtrueにすると途中終了ではなく、

瞬時に最後まで実行した感じになり、OnCompleteも実行されます。

//途中終了(最後まで瞬時に実行)
tweener.Kill(true);
f:id:kan_kikuchi:20200528193329g:plain


ちなみにアニメーションを結合して使うSequenceでもKillやPause等の同様の操作が可能です。