Buravo46's Note

学んだ事を書いていくブログです。

【Unity】連続してAnimationClipを再生する

Animationコンポーネントには、

前回のアニメーションが終了してから、

次のアニメーションを再生する便利な関数があります。

それはAnimationのクラスが持つPlayQueued()という関数です。

この関数は前回のアニメーションが終了した際に、

アニメーションを再生するために使用します。

引数にはアニメーション名, QueueMode, PlayModeが必要となります。

ですが、QueueModeとPlayModeの2つはデフォルトで渡される値があるので

必要とされるのはアニメーション名の1つです。

QueueModeはデフォルトで他のAnimationClipが全て停止した後に再生する

QueueMode.CompleteOthersが渡されます。

PlayModeはデフォルトで同じレイヤーのアニメーションを停止させる

PlayMode.StopSameLayerが渡されます。

例えば、上に動くAnimationClip_UpとY軸へ回転するAnimationClip_Rotateが

存在するとして上へ移動した後にY軸へ回転するアニメーションのために

Aを再生し終えた後にBを再生したい時などに役立ちます。

実際の例として、2つのAnimationClipを再生する例を用意しました。

このスクリプトは用意した2つのAnimationClipを再生するスクリプトです。

using UnityEngine;
using System.Collections;

/*===============================================================*/
/**
* PlayQueued関数の使用例
* 2014年9月9日 Buravo
*/
public class Test_PlayQueued : MonoBehaviour {

    #region パブリック変数
    /*===============================================================*/
    /**
    * @brief 上方向に移動するアニメーションクリップ
    */
    public AnimationClip clip_up;
    /**
    * @brief 回転するアニメーションクリップ
    */
    public AnimationClip clip_rotate;
    /*===============================================================*/
    #endregion

    /*===============================================================*/
    /**
    * @brief 初期化
    */
    void Start () {
        animation.Play(clip_up.name);
        // PlayQueued(string animation,
        //            QueueMode queue = QueueMode.CompleteOthers,
        //            PlayMode mode = PlayMode.StopSameLayer)
        animation.PlayQueued(clip_rotate.name);
    }
}

挙動は下の画像みたいに動きます。

f:id:buravo46:20140909200208g:plain

アクションゲームの邪魔な敵や動く足場みたいに、

規則的な動きをさせたい時に役立ちます。

参考サイト

Unityスクリプトリファレンス - Animation

Unityスクリプトリファレンス - QueueMode

Unityスクリプトリファレンス - PlayMode