Unity: GoKit

UnityのAssetStoreにprime[31]が作った「GoKit」というトゥイーンライブラリが無料で提供されています。概要は、Gokitのサマリーページや、wikiを見ればおおよそ理解できます。
※ただ、GoKitの機能を絞ってもっと軽量化したGoKitLiteがある(AssetStoreにはなくGitHub上にだけある)ので、要件を満たしていればモバイルならGoKitLiteの方がいいかも。

基本的な使い方

・ステージ上に1つCubeを配置し、名前をBoxにする。
・新規C#スクリプトを作成し、名前をBoxTweenとし、ヒエラルキーウィンドウのBoxにドラッグ&ドロップする。
という準備をしてC#のStratメソッドに以下のように書いてみる。


void Start () {
    transform.positionTo( 4f, new Vector3(10, 10, 10));
}

これで、Box(this)のtransformが、4秒で(10,10,10)の位置に移動するようになる。この記述法はwikiではExtension Methodsというコーディングスタイル。記述量が少なくて済むのがメリット。

それとは別の記述方法でGoオブジェクトとGoTweenConfigを使ってトゥイーンさせる書き方は以下のようになります


void Start () {
    Go.to( transform, 4f, new GoTweenConfig().position( new Vector3( 10, 10, 10 ) ) );
}

これで同じ動きになります。
このTweenConfigを使ったコーディングスタイルのメリットはconfig部分を再利用できるということで、トゥイーン設定だけを個別に変数定義しておき、configに都度追加してあげることができます。


void Start () {
    var positionProperty = new PositionTweenProperty( new Vector3( 10, 10, 10 ) );

    var config = new GoTweenConfig();
    config.addTweenProperty( positionProperty );

    var tween = new GoTween( transform, 4f, config ); //wikiにはTweenと書かれているけどそれだとエラーになり、GoTweenにすれば動く
    Go.addTween( tween ); //wikiにはこの記述がないが、これを記述しないとトゥイーンがスタートしない。
}

これで同じ動きになります。

GoTweenChain

トゥイーンをチェーン(つなぐ)ように、最初のトゥイーンが終わったら次のトゥイーンをスタート・・・という風に連発で発動できる。
appendDelay(“時間”)を設定することでDelay(待機)設定もできる。
以下の記述でBoxが3秒で(5,5,5)に移動後、2秒待機し、その後3秒かけてサイズが4倍に大きくなる


void Start () {
    var moveTween = new GoTween( transform, 3f, new GoTweenConfig().position( new Vector3( 5, 5, 5 ) ) );
    var scaleTween = new GoTween( transform, 3f, new GoTweenConfig().scale( 4f ) );

    var chain = new GoTweenChain();
    chain.append( moveTween ).appendDelay( 2f ).append( scaleTween );
    chain.play();
}

※ここでもwikiサンプル記載のTween,TweenConfig,TweenChainを、GoTween,GoTweenConfig,GoTweenChainにしないとエラーで動かなかったのだけど、何か仕様変更か、僕の理解漏れがあるのだろうか。GoKitのフォーラムにもそれ系の話題は見つからず。

GoTweenFlow

チェーンではなく「フロー」ということで、AしながらBという風に、並列してトゥイーンを発動できる。BにDelay設定することで、Aがトゥイーンしながら、1.5秒後にBが始まるみたいなことができる。
以下の記述でBoxが3秒で(5,5,5)に移動を開始するが、その最中、1.5秒後に3秒かけてサイズが4倍に大きくなる。


void Start () {
    var moveTween = new GoTween( transform, 3f, new GoTweenConfig().position( new Vector3( 5, 5, 5 ) ) );
    var scaleTween = new GoTween( transform, 3f, new GoTweenConfig().scale( 4f ) );

    var chain = new GoTweenChain();
    chain.append( moveTween ).appendDelay( 2f ).append( scaleTween );
    chain.play();
}

configの上書き


//別途、ステージ上にbox2(Cube)を作成しておき、下記のbox2に割り当てておく
public GameObject box2;
void Start () {
    // 3倍に拡大するトゥイーンを3回繰り返すよう定義する
    var config = new GoTweenConfig().scale( 3 ).setIterations( 3 );

    // Boxに対して3秒かけて先ほどのconfigトゥイーンを実行する
    Go.to( transform, 3f, config );

    // configを再定義。3秒間隔をおいてから、マテリアルの色を黒にする。さらに繰り返し設定を1回に再定義する
    config.setDelay( 3f ).materialColor( Color.black ).setIterations( 1 );
	
    // 再定義したconfigをbox2に対して実行する。
    Go.to( box2.transform, 2f, config );
}

その他のプロパティのトゥイーン

オブジェクトの位置や回転だけでなく、Color, float, int, Vector2, Vector3(x, y, z), Vector3 paths, Vector4の値をトゥイーン変化させることができる。
.net/Monoクラスのプロパティに対してのみ変化させることができるのでShaderの値をトゥイーンさせたりはできないらしい。

link: GoKit Tween Library by prime31