ロゴ ロゴ

【新歓ブログリレー】Unityゲーム制作で便利なDOTweenの使い方

はじめに

新入生の皆さん、ご入学おめでとうございます。watanabeです。
私は電算に入ってからUnityでゲーム制作をするようになりました。その際DOTweenというライブラリを使うと、アニメーションが簡単に実装できて便利だったので紹介します。

DOTweenとは

スクリプトから簡単なアニメーションを実装できるライブラリです。Unity Asset Storeで無料で入手することができます。ここから入手

使い方

インポートとセットアップを済ませたら、DOTweenを使ってオブジェクトを動かしてみます。
次のスクリプトをCubeにアタッチして、実行します。

using UnityEngine;
using DG.Tweening; //DOTweenを使うときに必要

public class DOTweenTest : MonoBehaviour
{
    void Start()
    {
        // 3秒かけてローカル座標(5,0,0)へ移動する
        transform.DOLocalMove(new Vector3(5f, 0f, 0f), 3f);
    }
}


すると、Cubeは上のように移動します。DOLocalMove(Vector3 targetPos, float time)で、ローカル座標targetPosにtime秒かけて移動させることができます。
 
他にも、回転させるものや、大きさを変えるもの、透明度を変えるもの、などたくさんの機能があります。

using UnityEngine;
using DG.Tweening; //DOTweenを使うときに必要

public class DOTweenTest : MonoBehaviour
{
    // インスペクターから設定
    public GameObject rotateCube;
    public GameObject scaleCube;
    public GameObject fadeCube;

    void Start()
    {
        // 3秒かけて(180, 0, 0)に回転
        if(rotateCube != null) rotateCube.transform.DORotate(new Vector3(180f, 0f, 0f), 3f);

        // 3秒かけて(3, 3, 3)に拡大
        if(scaleCube != null) scaleCube.transform.DOScale(new Vector3(3f, 3f, 3f), 3f);

        // 3秒かけてアルファ値0にする
        if (fadeCube != null)
        {
            fadeCube.GetComponent<MeshRenderer>().material.DOFade(0f, 3f);
        }
    }
}


左からrotateCube、scaleCube、fadeCube

UIを作る

私はDOTweenをUIにアニメーションをつけるために使いました。例えば、赤い床に触れたらゴールのゲームがあるとして、ゴールしたら次のような表示がされるとします。

 
ここで、DOTweenを使ってアニメーションを用意します。

// ゴールしたら呼ばれるメソッド
public void ClearSequence()
{
    clearUIPanel.SetActive(true);

    // Sequenceを生成し、Appendでアニメーションを繋げることができる
    Sequence clearSequence = DOTween.Sequence();

    // clearText(GAME CLEAR!の文字)を0.5秒かけて2倍の大きさに拡大
    // 後ろにSetEaseを付けるとアニメーションの動き方を指定できる
    // Ease.QutBackは行き過ぎて戻る(今回は一瞬2倍以上の大きさに拡大されている)
    clearSequence.Append(clearText.DOScale(2f, 0.5f).SetEase(Ease.OutBack))

                 // 0.5秒待機
                 .AppendInterval(0.5f)

                 // ClearTextをそのアンカーから(960, -300, 0)の位置に移動させる
                 // UIの位置はアンカーで指定されているので、DOLacalMoveは使わない
                 // 本当は座標を直接指定するのではなく画面サイズを取得して適切な座標を計算するべき
                 // Ease.InOutQuartは中盤での変化が急になる
                 .Append(clearText.DOAnchorPos(new Vector3(960f, -300f, 0f), 0.5f).SetEase(Ease.InOutQuart))
                 // 後ろにJoinを付けると前のアニメーションと同時に進行させられる
                 // 今回は前のDOAnchorPosと、Joinの中のDOScaleが同時に進行する
                 .Join(clearText.DOScale(1.0f, 0.5f).SetEase(Ease.InOutQuart))

                 // ButtonPanel(2つのボタン)が画面外から移動してくる
                 .Append(buttonPanel.DOAnchorPos(new Vector3(960f, -540f, 0f), 0.5f).SetEase(Ease.OutBack));
}


UIにアニメーションが付きました。

おわりに

Unityゲーム制作におけるDOTweenの使い方を紹介しました。開発を便利にするアセットやライブラリは、制作してくれた人に感謝して使いましょう。

コメント入力

関連サイト