Buravo46's Note

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

【Unity】スクリプトからAnimationEventを追加

AnimationClipを再生中、どこかのタイミングで

音を鳴らしたりエフェクトを生成したいと思った時に便利な方法があります。

それは、再生するAnimationClipにAnimationEventを追加して発生させることです。

AnimationEventとは、アニメーションの一部として指定したタイミングで

SendMessage関数のようにスクリプトの関数を呼び出すことができるイベントのことです。

呼び出す関数に使用できる引数の型は int型float型,string型,Object型です。

引数の数は引数なし、または引数1つの場合のみなので注意しましょう。

例としてAnimationEventを発生させるスクリプトを用意しました。

using UnityEngine;
using System.Collections;

/*===============================================================*/
/**
* AnimationEventの使用例
* 2014年9月12日 Buravo
*/
public class Test_AnimationEvent : MonoBehaviour {

    #region パブリック変数
    /*===============================================================*/
    /**
    * @brief アニメーションクリップ
    */
    public AnimationClip clip;
    /*===============================================================*/
    #endregion

    /*===============================================================*/
    /**
    * @brief 初期化
    */
    void Start () {
        // アニメーションイベントの作成
        AnimationEvent animaEvent = new AnimationEvent();
        // 関数名をセット
        animaEvent.functionName ="SetIntParameter";
        // Int型のパラメーターを格納
        animaEvent.intParameter = 0;
        // 設定した時間にイベントを送信
        animaEvent.time = clip.length;
        // アニメーションイベントの追加
        clip.AddEvent(animaEvent);
        // アニメーションの再生
        animation.Play(clip.name);
    }
    /*===============================================================*/

    /*===============================================================*/
    /**
    * @brief AnimationEventに使用する関数
    * @param int 整数
    */
    void SetIntParameter (int intParam) {
        Debug.Log(intParam);
    }
    /*===============================================================*/

}
/*===============================================================*/

このスクリプトでは関数の引数をint型にして、

animaEvent.intParameterで引数を渡しています。

float型であればanimaEvent.floatParameter,

string型であればanimaEvent.stringParameter,

Object型であればanimaEvent.objectReferenceParameterで渡すことが出来ます。

設定した時間にイベントを送信するanimaEvent.timeでは

アニメーションの再生時間であるclip.lengthを渡しています。

AnimationClipの再生時間を渡すことで、

アニメーションの最後にイベントを送信するようにしています。

スクリプトから追加することによって

共通するイベントや状態に応じたイベントを追加するなど

柔軟に対応出来るようになると思います。

参考サイト

unity学習帳 - Animation

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

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