Animation Events を使用することでアニメーションクリップを最大限に活用することができ、タイムラインの特定のタイミングでオブジェクトのスクリプトに含まれる関数呼び出しを行うことができます。
関数はアニメーションイベントにより呼び出され、オプションとして引数をひとつ付加することができます。引数は float、string、int、オブジェクト参照、あるいは AnimationEvent オブジェクトとすることができます。AnimationEvent オブジェクトはメンバー変数を持ち、float、string、int、オブジェクト参照を、関数呼び出しをトリガーしたイベントに関する情報とともに、同時に関数に受け渡すことができます。
// この C# 関数はアニメーションイベントによって呼び出されます
public void PrintFloat (float theValue) {
Debug.Log ("PrintFloat is called with a value of " + theValue);
}
クリップにアニメーションイベントを追加するには、現在の再生位置で Event button をクリックするか、アニメーションの任意の位置でイベントをトリガーしたいタイミングで、Event Line をダブルクリックします。イベントを追加した後、マウスでドラッグすることにより位置を再度変更することもできます。イベントを削除するには、選択して Delete を押すか、右クリックしてコンテキストメニューから Delete Event を選択します。
イベントを追加すると、関数の名前と渡したい引数の値を入力するためにプロンプトがダイアログボックスとして表示されます。
クリップに追加されたイベントはイベントラインでマーカー表示されます。マーカーの上をマウスオーバーすることで関数と引数値がヒント表示されます。
とても簡単な例を挙げます。簡単な機能を持つ短い関数 PrintEvent()
を加え、文字列と時刻を含むデバッグメッセージを表示します。
// This C# function can be called by an Animation Event
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public void PrintEvent(string s) {
Debug.Log("PrintEvent: " + s + " called at: " + Time.time);
}
}
Unity で Cube オブジェクトを作成し ExampleClass
スクリプトを加えます。そのオブジェクトを選び Animation ウィンドウを開きます。X 座標の Position カーブを設定します。
次に、X 座標のアニメーションを 1 秒ほどの間に 0.4 ほどに増加するように設定します。それから、約 0.8 秒の時点でアニメーションイベントを作成します。再生ボタンを押すと、キューブが X 軸に沿って前に行ったり後ろに行ったりして動きます。イベントメッセージは 0.8 秒の時点から毎秒ごとにコンソールに表示されます。この例は簡単なゲームオブジェクトにアニメーションイベントを加える簡単な方法です。