【Unity】DoTweenで連続アニメーションを作成する

unity

iTweenとDoTween。

似ているのでどっちを使えば良いのか混乱する。

ゲームを作っていて連続的なアニメーションを作りたかったので、DoTweenを作って作ることにした。

調べてみると、連続アニメーションはDoTweenを使うのが得策のようだ。

DoTweenにはSequenceと呼ばれる連続アニメーションを作るためのものが用意されている。

こやつを使ってダルマが右(or左)に回転して元の位置に戻るといったアニメーションを作ってみた。

とても簡単な処理に見えるけど、色々と工夫している。

  • 相対的な回転にする
  • コールバックを使って回転完了を通知
  • Sequenceを使って連続アニメーション

今回のようにタップされたら回転するようにすると連打する輩が出てくる。

そうすると回転し終わってないのに、次の回転が加わり早い話がバグる。

一度、AppStoreのレビューで突っ込まれたことがある。

なので、コールバックで入力を受け付けるコライダ付きオブジェクトを管理する。

DoTweenを使うための宣言。

using DG.Tweening;

回転させるコード。

//連打入力を防ぐために入力を無効に
        objects[4].SetActive(false);
        objects[5].SetActive(false);
        AudioManager.instance.PlaySound(3);
        Transform daruma = GameObject.Find("Daruma").transform;
        Sequence seq = DOTween.Sequence();
        seq.Append(daruma.DOLocalRotate(new Vector3(movement, 0, 0), 0.3f).SetRelative());
        seq.Append(daruma.DOLocalRotate(new Vector3(-20f, 0, 0), 0.3f).SetRelative())
            .AppendCallback(() => {
                Debug.Log("終わったやで");
                objects[4].SetActive(true);
                objects[5].SetActive(true);
            });
        seq.Play();

追記:

振り子のように回転後に元の位置に戻るのはDOPunchRotationを使うと良いみたい。

seq.Append(daruma.DOPunchRotation(new Vector3(movement, 0, 0), 1f,2).SetRelative())

 

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog