Unityのアニメーションイベントの使い方メモ。アニメーション中にスクリプトで音を鳴らせてびびったΣ(゚Д゚)

unity アニメーションイベント Unity
※記事内に広告が含まれています。

バーチャル3Dクリエイター神部まゆみです(*^_^*)

この記事はUnityのアニメーションイベントの使い方についての記事です。

動作確認した最新バージョンは Unity 6000.3.1 です。

●PRスペース●

〇まゆみマート|BOOTH

BOOTHでVRoidテクスチャやVRChat向けオブジェクトなどを販売しています。いいねしてくれると励みになります(*^-^*)

やりたいこと:アニメーション中に音を鳴らしたりとかしたい

これまだ使ったことがないけど、確かChatGPTに聞いた時にこういうことができるとか言っていたような。

銃を撃つアニメーションとかで発砲音を鳴らすときに使いたいですね。

公式マニュアルなど

Unity公式のこのページがわかりやすいか…。

アニメーションウィンドウでアニメーションイベントを追加し、インスペクターからスクリプトの関数を指定して呼べるっぽい。

アニメーションイベントの使用 - Unity マニュアル
アニメーションイベントを使用すると、タイムライン上の特定のポイントで関数を呼び出すことができます。これらの関数は、ゲームオブジェクトにアタッチされた任意のスクリプトに記述することができます。

ChatGPT氏に聞いてみる

一応彼に聞いてみます。

神部まゆみ
神部まゆみ

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

ChatGPT
ChatGPT

Unityのアニメーションイベント(Animation Events)は、アニメーションの特定のフレームでC#の関数を呼び出すことができる仕組みです。主にアクションゲームやキャラクターアニメーションで、攻撃判定の発生タイミングや音再生などを同期させるのに使われます。

🔧 基本的な使い方

1. アニメーションイベントの追加方法

  1. アニメーションウィンドウを開く
    Unity上部メニュー:Window > Animation > Animation
  2. アニメーションを編集したいオブジェクトを選択し、対応するアニメーションを表示。
  3. タイムライン上で右クリックして「Add Animation Event」を選択。
  4. イベントが追加されると、小さなマーカーが表示される。
  5. そのマーカーをクリックし、「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

音を鳴らすサンプルについて聞いてみる

神部まゆみ
神部まゆみ

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

ChatGPT
ChatGPT

どういたしまして!
Unityのアニメーションイベントで音を鳴らすだけのシンプルな実装はとても簡単です。以下に、導入手順とサンプルコードを紹介します。

🎵 必要なもの

  • AudioSource(音を鳴らすためのコンポーネント)
  • AudioClip(再生する音声ファイル)
  • MonoBehaviour スクリプト
  • アニメーションイベント

🔧 導入手順

① オブジェクトに AudioSource をアタッチ

  1. 音を鳴らしたいキャラクターやオブジェクトを選択。
  2. Inspector で「Add Component」→ AudioSource を追加。
  3. 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 スクリプトをアタッチしたオブジェクトの InspectorseClip に音声ファイル(例:足音や剣の音など)をドラッグ。

④ アニメーションイベントの追加

  1. 上部メニュー Window > Animation > Animation を開く。
  2. 対象のオブジェクトを選択し、該当アニメーションを表示。
  3. 再生バーの音を鳴らしたいフレームで右クリック →「Add Animation Event」
  4. 表示されるイベントウィンドウで 関数名 PlaySE を指定(先ほどの関数と一致させる)。

✅ 補足

  • PlayOneShot() は、同時再生にも対応していて便利です。
  • 複数の音を使い分けたい場合は、引数付きイベント(例:PlaySEByName(string name))にしてもOK。

本当に動くか実際にやってみる

ChatGPT氏はたまに間違ったことを言うため、本当に動くか実際にやってみます。

アニメーションを用意する

Mixamoで適当なアニメーションをダウンロードします。

Mixamo

プロジェクトにインポートしてHumanoidリグに、デフォルトだとRead Onlyだから一応複製してからキャラに適用します。

Mixamoについてはこちらも参考に。

ループの設定だけしておく。

unity アニメーションイベント

スクリプトを用意してアタッチする

このスクリプトを作ってキャラにアタッチします。

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」を使わせてもらいます。

unity アニメーションイベント

”ガーン”で検索した結果[1]|効果音ラボ

これをインポートしてスクリプトに設定する。

オーディオソースコンポーネントを追加する

これがないと音が出ません。

↓ゲーム開始時に再生のチェックは外しておきます。

unity アニメーションイベント

アニメーションイベントを追加、スクリプトのメソッドを指定する

アニメーションをちょうどよさそうな場所で止めて、右クリックで「アニメーションイベントを追加」。

インスペクターでSoundPlayerのPlaySeメソッドを指定する。

ここね。

unity アニメーションイベント

アニメーターコントローラーでデフォルトステートメントに設定、カメラをキャラのところに持ってくる

アニメーションプレビューではスクリプト発動しないので再生ボタンを押す必要がある。

アニメーションをデフォルトステートメントに設定して、見えるようにカメラをキャラのところに持ってきます。

「ビューに揃える」を使うとシーンカメラの位置をメインカメラに代入できるので便利です。

これでできた!

これで無事に音が出ました! ※音が出ます

おわりに

案外簡単にできて良かった。

これスクリプト発動させられるから色々な使い方ができそうだな…。もっと早くやっておけば良かったかも(^_^;)

主にエロ用途だけどもw

また何かあれば追記します(*^_^*)

タイトルとURLをコピーしました