アニメーション全般のAssetについて
どうも皆様、一週間ぶりです。
今回はアニメーション全般を行う上で便利なアセットをご紹介致します。
iTween
https://www.assetstore.unity3d.com/jp/#!/content/84
結構有名なAssetだと思います。基本的な使い方としてハッシュに移動先の座標やアニメーションに緩急を付けるやり方になります。例として以下の処理を記載しました。
処理の内容は、指定した時間が経過したら指定した座標までGameObjectが緩急を付けて移動、到着後は自身のFinishEventメソッドを実行するという内容です。
public class MoveCharacter : MonoBehaviour { [SerializeField] private Vector3 toPosition; [SerializeField] private float time; private void Start() { iTween.MoveTo(this.gameObject, iTween.Hash( "position", toPosition, "time", time, "easeType", iTween.EaseType.easeInCubic, "oncomplete", "FinishEvent", "oncompletetarget", this.gameObject)); } private void FinishEvent() { Debug.Log("finish event!!"); } }
ご覧の通り、たった数行のスクリプトで移動処理が簡単に行うことが出来ます。
ただしこちらは、AnimationCurveで作成した独自の緩急がそのまま使用できなかったり、複雑なことをやろうとするとハッシュが長くなる等(好みの問題ではありますが…)が少し懸念されます。
DoTween
https://www.assetstore.unity3d.com/jp/#!/content/27676
こちらもiTweenに劣らぬ高性能なアニメーション全般のAssetです。
上記で記載致しましたiTweenの処理と同じ内容を以下に記載致しましょう。
using DG.Tweening; public class MoveCharacterDo : MonoBehaviour { [SerializeField] private LogBehaviour log; [SerializeField] private Vector3 toPosition; [SerializeField] private float time = 3.0f; [SerializeField] private AnimationCurve curve; private void Start() { DOTween.Init(); DOTween.logBehaviour = LogBehaviour.Default; this.transform.DOMove(toPosition, time).SetEase(curve).OnComplete(()=> { Debug.Log("FinishEvent"); }); } }
どうでしょう?こちらも短い行で移動処理が出来てしまいました。
更にSetEaseを使用することでAnimationCurveが使えるため、独自の緩急でアニメーションを行うことが出来ます。
書き方がreactive extensionっぽいので、UniRXなどを使ったことがある人にとってはそれほど違和感はないかと思います。
以上となります。正直、どのAssetがお勧めかと言われても「好み、使用する場面」によって変わります。
ただ一つ言えることは便利だからと言って、安易にアセットを使いまくることは危険だと言うことです。
なぜなら、Assetを使用と言うことはAssetの使用方法(ルール)に乗っ取りソースコードを構築することになります。もしそのAssetに問題(廃止、Assetのバグ)で使用することが困難になった場合、今まで作ってきたソースコードが全て水の泡にになるかもしれません。
なのでAssetを使用する場合は、周りの評判やどう言った構造で作られているかを時間かけても調べるべきだと考えられます。