DOTweenとAnimatorを組み合わせた作品の
巻き戻し
と早送り
を実装していきます。
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; // ※この実装では巻き戻りません
※こちらの記事を参考にさせて頂きました。
動的アニメーションスピード変更のための準備
1.Animator Parameters
にfloat
指定のSpeedキーを追加します。
2.再生速度を変更したいAnimationClipがアタッチされたAnimatorのState
を選びます。
※今回の例だとRunning(Loop)のみ
3.上図のようにインスペクタからステートの設定をします。
animator.SetFloat ("Speed", -1f);
すると意図通りの巻き戻り再生が出来るようになります。
完成品
SD Unity-chanにAddComponentしているクラスはコチラ。
補足
最後の着地でジャンプしているところはAnimatorControllerを調整しています。
Animator Parametersにstring型指定でIdle
というキーを定義します。
AnyState
からTopToGround
にTransitionを設定して、矢印を選択肢インスペクタへ。
Conditions
にIdle
をセットします。
この設定で以下のコードでアニメーションが遷移します。
animator.SetTrigger ("Idle");