2014年8月8日金曜日

UnityのiTweenで連続的にアニメーションさせる

UnityでGameObjectをアニメーションさせたい場合、iTweenというライブラリを使うと便利です。
http://itween.pixelplacement.com/index.php

このライブラリは以下のように簡潔な記述でアニメーションを実行することができます。

iTween.MoveTo(gameOject, iTween.Hash("x", 10, "time", 1f);

ただし、あるアニメーションが終わったあとに別のアニメーションを連続して実行したい場合、コールバックメソッドを定義する必要があり面倒です。
//横→縦と移動する
void Start()
{
 iTween.MoveTo(gameOject, iTween.Hash("x", 10,
                                       "time", 1f, 
                                       "oncomplete", "OnComplete", 
                                       "oncompletetarget", gameObject);
}

void onComplete
{
 iTween.MoveTo(gameOject, iTween.Hash("y", 10, "time", 1f);
}


そこでこれをサポートするヘルパークラスを作成してみました。

iTweenExtention

以下のように使用できます。

iTweenExtention.SerialPlay(
 gameOject
 ,(iTweenAction)iTween.MoveTo, iTween.Hash("x", 10, "time", 1f)
 ,(iTweenAction)iTween.MoveTo, iTween.Hash("y", 10, "time", 1f)
);

記述が冗長だったりパラメータが不正な場合はランタイムエラーになったりする等の欠点があるので余裕があれば改善してきたいところです。