名古屋でアプリ・VR開発を行っています
ワクワクできるゲームをガンガン開発リリース中!

【Unity】便利なTweenアセットについて

こんにちは!SAT-BOXのカメです。

皆さんGWはいかがでしたか?
私はリフレッシュに山登りに行ってきました。
気分は爽快ですが、体は筋肉痛です...

さて今回の内容ですが、
Unityでオブジェクトを滑らかに動かしたい。でもアニメーションを使う程でもないし...手軽に実装したい。
という時にお世話になるTweenアセットについてお話しようと思います。


【Tweenアセットとは】
Tweenアセットを簡単に説明すると、目標値と遷移時間を設定するだけで、現在の値から目標値までを補完するアニメーションを提供してくれるライブラリを指します。

UnityでTweenアセットを探すと
・iTween
・LeanTween
・DOTween
この3つをよく目にします。

初めて使ったのはiTweenでしたが、どうやらiTweenは処理が重いそうです。
今はこの中で一番処理が軽いとされているLeanTweenを使っています。
(負荷の軽さは LeanTween > DOTween >>> iTween だそうです)

高頻度で呼び出すような処理をしなければ、iTweenでも問題なく使えます。
でも高頻度で連続して呼びたいこともあるので、なるべく軽いものを選んでいます。
DOTweenはまだ使ったことがありません。
iTweenで出来ることはDOTweenでも出来るようなので、次に使うとしたらDOTweenかな?


【LeanTweenについて】
マニュアルは英語ですが、かなり直感的に理解できる仕様になっているので、
困ったら公式サイトを確認すれば解決すると思います。

なので今回は少し応用的な使い方を紹介しようと思います。

① 目標値を更新しながらアニメーションさせたい場合
オブジェクト座標を移動する時に、頻繁に移動先を更新したい場合があります。
その時はcancelを呼び出して直前に読んでいたLeanTweenメソッドを消す必要があります。
この時、gameObjectに影響している全てのLeanTweenメソッドを消す場合と、指定のメソッドだけ消す方法があります。

//オブジェクト単位でcancelして更新する場合
LeanTween.cancel(gameObject);
LeanTween.move(gameObject, gameObject.position + new Vector3(1, 0, 0), 0.1f);

//メソッド単位でcancelして更新する場合
int id;
LeanTween.cancel(id);
id = LeanTween.move(gameObject, gameObject.position + new Vector3(1, 0, 0), 0.1f).id;


② n秒間隔で繰り返しアニメーションさせる場合
繰り返し処理は簡単に実装出来ますが、毎回待ち時間を設定する場合は、少し工夫が必要です。
例として2秒間隔ごとに、変数aを0から10に1秒かけて変更する処理を書きます。
delayedCallを繰り返し、その中で変数aを変更することで実現出来ます。

LeanTween.delayedCall(gameObject, 2, () =>
{
 LeanTween.value(gameObject, 0f, 10f, 1f)
  .setOnUpdate((float val) =>
 {
  a = val;
 }).setOnComplete(() => { a = 0f; });
}).setRepeat(-1);


今回紹介した使い方の他にも、画像のフェード処理や、タイマーとして利用するなど
様々な使い方があります。
これからUnityを始める人は、ぜひ利用してみて下さい。

以上、カメでした。