今回はUnityユーザーの皆さんならおそらくご存じの神アセット「DOTween」の使い方を丁寧にご紹介するという内容です。
DOTweenは非常に人気が高いアセットなので既に持っていらっしゃる方も多いかと思いますが、正直なところ「使い方がよくわかんない」という方も少なくないのではないでしょうか。
そこでここでは
- DOTweenとは?
- DOTweenの導入方法
- 無料版DOTweenの使い方
- 有料版DOTween Proの紹介
といったことについて詳しく説明していきますね。
はじめに:DOTweenとは?
では、はじめに「DOTweenって何?」という方もいらっしゃるかもしれませんので簡単に概要を説明しておきます。
DOTweenはゲームオブジェクトの動き等を簡単に制御できるUnityの無料アセットです。
これを使うと例えば
- ゲームオブジェクトの滑らかな移動・回転・拡大縮小
- 数値の滑らかな変化
などをいとも簡単に実現することができます。
…と、これだけだとDOTweenのすごさがイマイチ良く分からないのですが、例えばUnityで「ゲームオブジェクトを滑らかに動かす処理」は(非常によく使うにもかかわらず)標準搭載されておらず、しかも自前で作ろうとすると物凄く面倒くさいんですよね。その点DOTweenを使えばその面倒くさい部分を全部やってくれるので、結果としてゲーム開発がすごく捗るというわけです。個人的にはこれなしではまともにゲームを作れないと言っても過言ではないくらい重宝しています。
DOTweenの導入方法
さて、前置きはこのくらいにしてここから本題に入っていきます。まずはDOTweenの導入方法についてです。
やり方は簡単で、普通にアセットストアでDOTweenを入手し、パッケージマネージャからDOTweenを選んでインポートします。するとセットアップ用のウィンドウが開くので、緑色の「Setup DOTween」ボタンをクリックしてください(下図)。
しばらく待てば自動的にセットアップが完了します。これで導入はOKです。
DOTweenの使い方まとめ
ではここからDOTweenの使い方を説明していきます。ここでは分かりやすいように
- 基本編(基本的な関数、メソッドチェーン)
- 応用編(コールバック、シーケンス等、To関数など)
の2つに分けて順番に説明していきますね。
基本編:基本的な使い方をマスターしよう
まずはDOTweenの基本的な使い方をマスターしましょう。いきなりですが実際に動いている様子を見て頂いたほうが分かりやすいと思ったので、次のようにゲームオブジェクトを往復させるサンプルコードをご用意しました。
using UnityEngine; using DG.Tweening; // DOTweenを使うにはこの一文が必要 public class DOTweenTest : MonoBehaviour { [SerializeField] Vector3 targetPosition = new Vector3(1.5f, 0, 0); [SerializeField] float duration = 1; [SerializeField] Ease ease = Ease.Linear; void Start() { transform.DOMove(targetPosition, duration).SetLoops(-1, LoopType.Yoyo).SetEase(ease); } }
このサンプルコードを見ながら下記の説明を読んでいってください。
「using DG.Tweening」が必要
まずDOTweenの機能を使うには、C#スクリプトの冒頭に「using DG.Tweening」という一文を加える必要があります。たまにこの一文を忘れて「使えないよ~」と困っている方がいますが忘れないようにしましょう。
DOTweenの一般的な関数の使い方
お次はDOTweenの一般的な関数の使い方です。上のサンプルコードでは
transform.DOMove(targetPosition, duration)
までがメインの関数になっていて、基本的には「制御したいコンポーネント.DOTweenの関数」という形で書きます。
なおサンプルでは「DOMove」という関数を使いましたが、DOTweenには色々な関数が用意されていて様々な制御が可能です。使い方はどれもだいたい同じで
関数名(終了値, 継続時間)
といった感じになっています(※もちろん関数ごとに細かい違いはありますが)。なので例えば移動処理であれば、第一引数に目的の座標を入力し、第二引数に継続時間(要は目的地にたどり着くまでの時間)を入力すればOKです。
ちなみに主な関数には次のようなものがあります。
- DOMove:移動
- DORotate:回転
- DOScale:拡大縮小
- DOJump:ジャンプするような動作
- DOPath:パスに沿って移動
- DOColor:色変更
- DOFade:不透明度などを変化
詳しくはDOTweenの公式ドキュメントをご覧ください。
メソッドチェーンによるオプションの指定
さて、サンプルコードをご覧いただくとDOMove関数の後にも関数が連なったようになっているのが分かりますよね。これはメソッドチェーンというのですが、DOTweenではこのメソッドチェーンを使って制御に細かいオプションを付けることが可能です。
例えば、サンプルコードで出てきたものを紹介すると
- SetLoops:
第一引数にループ回数(-1で無限)、第二引数にループの方式を入力 - SetEase:
変化の緩急(=イージング)を指定
といった感じになっています。これもいくつか種類があるので、気になる方は公式ドキュメントを参照したりググったりしてみてください。
なおSetEase関数では指定できるイージングの種類が非常に多く、しかも字面だけだとどんな動きをするのか分からないので困ると思いますが、以下のサイト様が非常に丁寧にまとめてくださっているので参考にしてみると良いでしょう。
動かすのを中断したい場合
ここまでの内容でゲームオブジェクトの動きをある程度制御できるようになりましたが、場合によっては途中で動きを止めたくなることもあるでしょう。
そんなときは下のように「Kill関数」を使うことで簡単に制御を破棄することができます。
tween.Kill();
応用編:より高度な機能を使いこなそう
では次に応用的なDOTweenの使い方を説明していきます。少し難しい内容になってしまうかもしれませんが、使いこなせると非常に便利なので是非覚えて頂ければと思います。
- コールバック
- シーケンスの作成・実行
- To関数
コールバック
DOTweenではメソッドチェーンを使ってコールバック(=特定のタイミングで関数を実行すること)を指定することも可能です。例えば、処理が完了したときに「Sample」という関数を呼び出したいときは次のように書きます。
using UnityEngine; using DG.Tweening; public class DOTweenTest : MonoBehaviour { Vector3 targetPosition = Vector3.one; float duration = 1; void Start() { transform.DOMove(targetPosition, duration).OnComplete(() => Sample()); } void Sample() { Debug.Log("Complete"); } }
サンプルではDOTweenの「OnComplete」関数にラムダ式を使ってSample関数を渡すことで、処理が完了したときにコンソールに「Complete」という文字列が表示されるようにしています。
なおコールバック関数としては次のようなものを指定できます。
- OnStart:処理開始時に呼び出し
- OnUpdate:処理中に毎フレーム呼び出し
- OnComplete:処理完了時に呼び出し
- OnKill:制御が破棄されたときに呼び出し
シーケンスの作成・実行
さて、お次は「シーケンス(Sequence)」の作成と実行のやり方です。シーケンスとはDOTweenの処理をまとめて実行できる機能で、複数の処理を組み合わせて順番に実行したり同時に実行したりしたいときに非常に便利です。
シーケンスの作成方法
まずシーケンスを作成するには次のようなコードを記述します。
Sequence sequence = DOTween.Sequence();
シーケンスに処理を登録する方法
次にシーケンスに必要な処理を登録します。登録では
- 登録した順番に実行したい処理の場合:Append関数
- 前の処理と同時に実行したい処理の場合:Join関数
を使います。
void Sample() { Sequence sequence = DOTween.Sequence(); sequence.Append(tween1); sequence.Join(tween2); }
シーケンスを実行する方法
シーケンスを実行するには「Play」関数を使えばOKです。
sequence.Play();
To関数
次は使い方がちょっと難しいですが非常に便利な「DOTween.To」関数の使い方です。この関数を使えば、int型またはfloat型の数値であればどんなものでも滑らかに変化させることができます。サンプルコードは次の通り。
using UnityEngine; using UnityEngine.UI; using DG.Tweening; public class SliderTweenSample : MonoBehaviour { [SerializeField] Slider slider; void Start() { ChangeSliderValue(); } void ChangeSliderValue(float value = 1, float duration = 2) { DOTween.To(() => slider.value, (x) => slider.value = x, value, duration).SetDelay(1); } }
UIのスライダーの数値を滑らかに変化させるサンプルです。To関数の引数は
- 第一引数:getter
- 第二引数:setter
- 第三引数:終了値
- 第四引数:継続時間
となっていて、おそらく第一引数と第二引数の指定が良く分からないという方が多いと思います。この辺はC#のラムダ式の話になってくるので詳細は割愛しますが、とりあえず上のサンプルであれば
- 第一引数:スライダーの値を変化させるよ
- 第二引数:一時変数xを使って、スライダーの値にxを代入するよ
という感じの理解で問題ないと思います。
有料版の「DOTween Pro」はさらに便利!
さて以上がDOTweenの無料版の使い方のお話です。ただ正直なところ、ゲームオブジェクトを動かすのにいちいちC#スクリプトを書くのも面倒くさいですよね。
そこでそんな面倒くさがりなあなたに朗報です。実はDOTweenには有料のPro版があり、それを導入することでスクリプトを書かなくてもゲームオブジェクトを制御できるようになります。
Pro版には
- DOTweenAnimation
- DOTweenPath
といったコンポーネント(※下図参照)が同梱されているので、それをゲームオブジェクトにアタッチすることでインスペクターから簡単にゲームオブジェクトの動きを制御できるようになるというわけです。
いちいちC#スクリプトを書くのが面倒くさいな~と思っている方や、スクリプトからゲームオブジェクトを制御するのが何となく苦手だなという方にはお勧めです。
おわりに
以上、長くなってしまいましたがDOTweenの使い方について詳しくご説明しました。DOTweenは使い方が少し特殊なので最初は戸惑うかもしれませんが、慣れると絶対に必要不可欠なアセットになると思います。ぜひ上記の内容を参考にしていただき、DOTweenを使いこなせるようになって頂ければと思います。
この記事がUnityでのゲーム開発のお役に立てば幸いです。