アニメーションイベントを使用することでアニメーションクリップを最大限に活用することができ、タイムラインの特定のタイミングで、オブジェクトのスクリプトにある関数を呼び出すことができます。
関数はアニメーションイベントにより呼び出され、オプションとして引数をひとつ付加することができます。パラメーターは float
, string
, int
, オブジェクト
参照、あるいは AnimationEvent オブジェクトです。AnimationEvent オブジェクトはメンバー変数を持ち、float、string、int、オブジェクト参照をすべて一緒に、関数呼び出しをトリガーしたイベントに関する情報とともに、関数に受け渡すことができます。
// この C# 関数はアニメーションイベントによって呼び出されます
public void PrintFloat (float theValue) {
Debug.Log ("PrintFloat is called with a value of " + theValue);
}
クリップに アニメーションイベントを追加するには、現在の再生位置で Add event をクリックします。アニメーションの任意の位置で アニメーションイベントを加えるには、イベントをトリガーしたい地点で、イベントライン をダブルクリックします。イベントを追加した後、マウスでドラッグすることによりイベントの位置を再度変更することもできます。イベントを削除するには、選択して Delete を押すか、右クリックしてコンテキストメニューから Delete Event を選択します。
イベントを追加すると、インスペクターウィンドウにいくつかのフィールドが表示されます。このフィールドで、呼び出したい関数の名前と渡したいパラメーターの値を指定します。
クリップに追加されたイベントはイベントラインでマーカー表示されます。マーカーの上をマウスオーバーすると、関数名とパラメーター値のツールチップが表示されます。
タイムラインで複数のイベントを選択できます。
複数のイベントを選択するには、Shift キーを押しながらイベントマーカーをひとつずつ選択して加えます。また、選択するイベント部分の選択ボックスをドラッグすることもできます。つまり、下の図のようにイベントマーカーエリアをクリックしてドラッグします。
この例は、アニメーションイベントを簡単なゲームオブジェクトに加える方法を示しています。すべてのステップを行うと、再生モードの間、キューブが x 軸に沿って前後にアニメーションします。そして、イベントメッセージが 0.8 秒の時点から毎秒ごとにコンソールに表示されます。
この例には、PrintEvent()
関数を含む短いスクリプトが必要です。その関数には文字列 (“called at:”) と時間が含まれています。
// この C# 関数はアニメーションイベントによって呼び出されます
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public void PrintEvent(string s) {
Debug.Log("PrintEvent: " + s + " called at: " + Time.time);
}
}
このサンプルコードを含むスクリプトファイルを作成し、Project フォルダーに置きます (Unity のProject ウィンドウ内で右クリックし Create > C# Script の順に選択し、上のコードサンプルを作成されたファイルにコピーアンドペーストし、保存します)。
Unity では、Cube ゲームオブジェクトを作成します ( GameObject > 3D Object > Cube)。新しいスクリプトファイルを加えるには、ファイルを Project ウィンドウからインスペクターウィンドウにドラッグ & ドロップします。
Cube オブジェクトを選び Animation ウィンドウを開きます (Window > Animation)。X 座標の Position カーブを設定します。
次に、X 座標のアニメーションを 1 秒ほどの間に 0.4 ほどに増加してから、0 に戻るように設定します。それから、約 0.8 秒の時点でアニメーションイベントを作成します。再生ボタンを押すと、アニメーションが実行されます。