渋谷ほととぎす通信

Unity・ゲーム開発 技術で一生食べていく情報発信

DOTweenとAnimator連動「巻き戻し」と「早送り」の実装方法

DOTweenの教科書という電子書籍を執筆しました。
興味ある方は読んでみてください。

※ここから本題です。

DOTweenとAnimatorを組み合わせた作品の
巻き戻し早送りを実装していきます。

f:id:esakun:20161220013955g:plain

DOTween、Animatorそれぞれ実装していきますが、
DOTweenには2通りの方法があります。

DOTween 方法1. 巻き戻しメソッドを使用する

再生中のTweenに対して巻き戻すメソッド
通常の再生に戻すメソッドが存在します。

  • PlayBackwards(巻き戻しメソッド)
  • PlayForward(元に戻すメソッド)

【サンプルコード】

var tween = transform.DOLocalMoveX(10f, 1f);

// 巻き戻し
tween.PlayBackwards();

// 元の再生に戻す
tween.PlayForward();

DOTween 方法2. タイムスケールを変更する

DOTweenのTweenインスタンスにはtimeScale 変数を変更する方法があります。

【サンプルコード】

var tween = transform.DOLocalMoveX(10f, 1f);
// 巻き戻し
tween.timeScale = -1f;

マイナス値を代入することで巻き戻し再生をします。

var tween = transform.DOLocalMoveX(10f, 1f);
// 元の再生に戻す
tween.timeScale = 1f;

正の値で通常の再生に戻します。

早送りしたい場合は、この値を1fより大きい値に設定するだけです。 逆にスローモーションにしたい場合は0 〜 1の値にします。

Animatorの巻き戻し方法

以前はAnimatorクラスのspeedプロパティを変更するだけで良かったのですが、 Unity5からは仕様変更が入ったようです。

// Unity5からはこの設定ではspeed == 0とみなされてアニメーションがストップします。
animator.speed = -1f; // ※この実装では巻き戻りません

こちらの記事を参考にさせて頂きました。

動的アニメーションスピード変更のための準備

f:id:esakun:20161220015522p:plain

1.Animator Parametersfloat指定のSpeedキーを追加します。

f:id:esakun:20161220015443p:plain

2.再生速度を変更したいAnimationClipがアタッチされたAnimatorのStateを選びます。
※今回の例だとRunning(Loop)のみ

f:id:esakun:20161220015415p:plain

3.上図のようにインスペクタからステートの設定をします。

animator.SetFloat ("Speed", -1f);

すると意図通りの巻き戻り再生が出来るようになります。

完成品

f:id:esakun:20161220013955g:plain

SD Unity-chanにAddComponentしているクラスはコチラ。

gist.github.com

補足

最後の着地でジャンプしているところはAnimatorControllerを調整しています。

f:id:esakun:20161220021702p:plain

Animator Parametersにstring型指定でIdleというキーを定義します。

f:id:esakun:20161220022102g:plain

AnyStateからTopToGroundにTransitionを設定して、矢印を選択肢インスペクタへ。

f:id:esakun:20161220022402g:plain

ConditionsIdleをセットします。

この設定で以下のコードでアニメーションが遷移します。

animator.SetTrigger ("Idle");

もっと詳しくDOTweenのことを知りたい方は、
DOTweenの教科書を読んでみてください。

あわせてどうぞ