バーチャル3Dクリエイター神部まゆみです(*^_^*)
この記事はUnityのアニメーションイベントの使い方についての記事です。
動作確認した最新バージョンは Unity 6000.3.1 です。
やりたいこと:アニメーション中に音を鳴らしたりとかしたい
これまだ使ったことがないけど、確かChatGPTに聞いた時にこういうことができるとか言っていたような。
銃を撃つアニメーションとかで発砲音を鳴らすときに使いたいですね。
公式マニュアルなど
Unity公式のこのページがわかりやすいか…。
アニメーションウィンドウでアニメーションイベントを追加し、インスペクターからスクリプトの関数を指定して呼べるっぽい。




ChatGPT氏に聞いてみる
一応彼に聞いてみます。


unityのアニメーションイベントについて詳しく教えてください


Unityのアニメーションイベント(Animation Events)は、アニメーションの特定のフレームでC#の関数を呼び出すことができる仕組みです。主にアクションゲームやキャラクターアニメーションで、攻撃判定の発生タイミングや音再生などを同期させるのに使われます。
🔧 基本的な使い方
1. アニメーションイベントの追加方法
- アニメーションウィンドウを開く
Unity上部メニュー:Window > Animation > Animation - アニメーションを編集したいオブジェクトを選択し、対応するアニメーションを表示。
- タイムライン上で右クリックして「Add Animation Event」を選択。
- イベントが追加されると、小さなマーカーが表示される。
- そのマーカーをクリックし、「Function」欄に呼び出したい関数名を入力。
2. C# スクリプトの準備
イベントで呼び出される関数は、アニメーション対象オブジェクト、またはその子・親にあるスクリプトに以下の条件で定義します。
csharpコピーする編集するusing UnityEngine;
public class CharacterController : MonoBehaviour
{
public void AttackStart()
{
Debug.Log("攻撃開始!");
// 攻撃判定ONなど
}
public void PlayFootstepSound()
{
Debug.Log("足音再生!");
// AudioSource.Play()
}
}
関数名はイベントと完全一致する必要があります。引数は省略可だが、
string,float,int,Objectなど一部型をサポートしています。
💡 活用例
| 用途 | 実行される関数 |
|---|---|
| 剣を振るアニメーションの途中で攻撃判定を出す | EnableHitbox() |
| 足が地面につくタイミングで足音を出す | PlayFootstepSound() |
| アニメ終了直前でスキルの発動 | TriggerSkillEffect() |
⚠ 注意点
- タイミングの調整はミリ秒単位ではなくフレーム単位(再生速度によってずれる可能性あり)。
- 関数が見つからない(タイプミスなど)と**”Function not supported”** エラーが出る。
- Animator Controllerを使っている場合のみ有効。Timelineなどでは挙動が異なる。
- 非アクティブなオブジェクトにはイベントが発火しない場合があります。
これ使いこなせたら便利そうですねΣ(゚Д゚)
えろい動画とかで効果音を鳴らすのに使えそうw
音を鳴らすサンプルについて聞いてみる


ありがとうございます。じゃあアニメーション中に音を鳴らすだけの関数を追加したいんですけど、サンプルコードや導入方法を教えてください


どういたしまして!
Unityのアニメーションイベントで音を鳴らすだけのシンプルな実装はとても簡単です。以下に、導入手順とサンプルコードを紹介します。
🎵 必要なもの
AudioSource(音を鳴らすためのコンポーネント)AudioClip(再生する音声ファイル)MonoBehaviourスクリプト- アニメーションイベント
🔧 導入手順
① オブジェクトに AudioSource をアタッチ
- 音を鳴らしたいキャラクターやオブジェクトを選択。
Inspectorで「Add Component」→AudioSourceを追加。AudioSourceの 「Play On Awake」チェックは外す(すぐ鳴らさないため)。
② スクリプトを作成(例:SoundPlayer.cs)
using UnityEngine;
public class SoundPlayer : MonoBehaviour
{
public AudioClip seClip; // Inspectorで設定する
private AudioSource audioSource;
void Start()
{
audioSource = GetComponent<AudioSource>();
}
// アニメーションイベントから呼ばれる関数
public void PlaySE()
{
if (seClip != null && audioSource != null)
{
audioSource.PlayOneShot(seClip);
}
else
{
Debug.LogWarning("AudioClip または AudioSource がありません!");
}
}
}
③ AudioClip を割り当てる
SoundPlayerスクリプトをアタッチしたオブジェクトのInspectorでseClipに音声ファイル(例:足音や剣の音など)をドラッグ。
④ アニメーションイベントの追加
- 上部メニュー
Window > Animation > Animationを開く。 - 対象のオブジェクトを選択し、該当アニメーションを表示。
- 再生バーの音を鳴らしたいフレームで右クリック →「Add Animation Event」。
- 表示されるイベントウィンドウで 関数名
PlaySEを指定(先ほどの関数と一致させる)。
✅ 補足
PlayOneShot()は、同時再生にも対応していて便利です。- 複数の音を使い分けたい場合は、引数付きイベント(例:
PlaySEByName(string name))にしてもOK。
本当に動くか実際にやってみる
ChatGPT氏はたまに間違ったことを言うため、本当に動くか実際にやってみます。
アニメーションを用意する
Mixamoで適当なアニメーションをダウンロードします。
プロジェクトにインポートしてHumanoidリグに、デフォルトだとRead Onlyだから一応複製してからキャラに適用します。
Mixamoについてはこちらも参考に。
ループの設定だけしておく。


スクリプトを用意してアタッチする
このスクリプトを作ってキャラにアタッチします。
using UnityEngine;
public class SoundPlayer : MonoBehaviour
{
public AudioClip seClip; // Inspectorで設定する
private AudioSource audioSource;
void Start()
{
audioSource = GetComponent<AudioSource>();
}
// アニメーションイベントから呼ばれる関数
public void PlaySE()
{
if (seClip != null && audioSource != null)
{
audioSource.PlayOneShot(seClip);
}
else
{
Debug.LogWarning("AudioClip または AudioSource がありません!");
}
}
}
オーディオクリップを設定
効果音ラボさんの「ショック2」を使わせてもらいます。


これをインポートしてスクリプトに設定する。
オーディオソースコンポーネントを追加する
これがないと音が出ません。
↓ゲーム開始時に再生のチェックは外しておきます。


アニメーションイベントを追加、スクリプトのメソッドを指定する
アニメーションをちょうどよさそうな場所で止めて、右クリックで「アニメーションイベントを追加」。
インスペクターでSoundPlayerのPlaySeメソッドを指定する。
ここね。


アニメーターコントローラーでデフォルトステートメントに設定、カメラをキャラのところに持ってくる
アニメーションプレビューではスクリプト発動しないので再生ボタンを押す必要がある。
アニメーションをデフォルトステートメントに設定して、見えるようにカメラをキャラのところに持ってきます。
「ビューに揃える」を使うとシーンカメラの位置をメインカメラに代入できるので便利です。
これでできた!
これで無事に音が出ました! ※音が出ます
おわりに
案外簡単にできて良かった。
これスクリプト発動させられるから色々な使い方ができそうだな…。もっと早くやっておけば良かったかも(^_^;)
主にエロ用途だけどもw
また何かあれば追記します(*^_^*)





