【Unity】アニメーションイベント
Unityのアニメーションイベントは、アニメーションの特定のタイミングでスクリプトをトリガーすることができる仕組みです。アニメーションイベントを使用することで、アニメーションが再生されるタイミングに応じて、スクリプトでカスタム処理を実行できます
例えば、キャラクターがジャンプするアニメーションを再生しているとき、ジャンプが最高点に到達したときに効果音を再生するような処理を実装する場合、アニメーションイベントを使用して、そのタイミングでスクリプトをトリガーし、効果音を再生することができます。
アニメーションイベントは、アニメーションの再生タイミングに応じて、オブジェクトの状態を変更することもできます。例えば、アニメーションが再生されるときにオブジェクトを移動したり、表示/非表示にしたりすることができます。
アニメーションイベントを使用して、キャラクターのジャンプ時に効果音を再生するスクリプトのサンプルコードです
using UnityEngine;
public class CharacterController : MonoBehaviour
{
public AudioClip jumpSound;
private AudioSource audioSource;
void Start()
{
audioSource = GetComponent<AudioSource>();
}
public void Jump()
{
audioSource.PlayOneShot(jumpSound);
}
}
このスクリプトでは、AudioSource
を持つオブジェクトにアタッチされています。アニメーションイベントは、アニメーションウィンドウで設定され、Jump
メソッドが呼び出されます。Jump
メソッドは、AudioSource
コンポーネントを使用して、jumpSound
クリップを再生します。
アニメーションイベントを設定するためには、アニメーションウィンドウを開き、イベントを設定したいフレームを選択し、イベントトリガーを追加して、メソッド名に Jump
を指定します。
チュートリアルを使った練習
ここでは、実際にCubeをプレイヤーに見立てて、ジャンプアニメーションの頂点で効果音がなるようにしてみましょう
Cubeを1つ作成します

Animatorコンポーネントとアニメーションを作成します
Projectウィンドウで、アニメーションを作成(Create)します

アニメーションをファイルとして先に保存します(ここではJumpと名付けています)

CubeオブジェクトにAnimatorコンポーネントを有効にします
Cubeゲームオブジェクトにアニメーションファイルをドラッグすることで、一連の依存関係をまとめて作れます

D&D後

アニメーションの作成
- Cubeを選択して、Jumpアニメーションファイルを開きます(ダブルクリック)
- AddPrepertyをクリックして、TransformコンポーネントのPositionの「+」をクリックして選択します

次のように作成していきます
ここでは、PositionのY軸を途中で1にするようにしています

プレビューでアニメーションを確認します
ジャンプの頂点で実行しいメソッドを登録します(イベントのタグを追加します)

インスペクターに登録エリアが出てきます

メソッド(イベントハンドラ)を作成して、Cubeオブジェクトにアタッチします
using UnityEngine;
public class JumpEvent : MonoBehaviour
{
public void PlayJumpSound()
{
Debug.Log("ジャンプの音源を再生");
}
}
作成したら、Cubeにアタッチします(方法は省略)
作成したメソッド(イベントハンドラ)を選択できるようになります

実行結果
頂点で、メソッドが実行されているのがわかります
ディスカッション
コメント一覧
まだ、コメントがありません