渋谷ほととぎす通信

エンジニア社長によるUnityとAIのブログ & エンジニアの生存戦略

【Unity】Timeline中のAnimationEventを受け取る方法と罠

【Unity】Timeline中のAnimationEventを受け取る方法と罠

こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • UnityTimeline上でAnimationEventって受け取れる?
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    Unity Timelineでアニメーション演出を作っていると、 AnimationEventを受け取りたくなる ときがあります。

    AnimationEventとはAnimationClipの任意のタイミングでイベントを受け取る仕組みです。AnimationEventを使えるとアニメーションの中に任意の処理を実行できるようになるため、演出の幅が広がります。

    そこで本記事ではUnity Timeline上でAnimationEventを使う方法を紹介していきます。

    👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

    AnimationEventとは

    AnimationEventとは任意のアニメーションタイミングで処理を実行できる仕組み です。AnimationClip内にイベントデータを仕込み、任意の関数を実行することができます。

    パラメーターも渡すことができるため、柔軟にイベント管理が可能です。詳しくはこちらの記事を参考にしてみてください。

    以降の章ではAnimationEventを理解している前提で進めていきます。

    Unity TimelineのAnimationTrackとは

    AnimationTrackとはUnityが提供するデフォルトトラックの1つでAnimationClipを再生します。

    AnimationTrackで動かす対象(Animator)をセットして任意のAnimationClipをタイムラインで動かすことができます。

    【Unity】Timeline中のAnimationEventを受け取る方法と罠_0

    またAnimationTrack内のレコードボタンをクリックすればその場でAnimationClipの作成もできます。

    Unity Timeline上でAnimationEventは直接追加できない

    AnimationTrackを触るとわかるのですが、AnimationEventを仕込む方法が提供されていません。結論から言うとTimeline Window上でAnimationEventは仕込めません。

    AnimationEventが保存される場所はあくまでAnimationClipファイル内です。つまりAnimationClipを編集できる 「AnimationWindow」からAnimationEventを仕込む必要がある のです。

    Unity TimelineのAnimationClipにAnimationEventを追加する方法

    ではUnityTimelineで作成したAnimationClipにAnimationEventを追加する方法を解説していきます。

    まずはAnimationTrackに追加したAnimationClipをダブルクリックします。
    【Unity】Timeline中のAnimationEventを受け取る方法と罠_1
    もしくはAnimationClipを 右クリック -> Edit in Animation Window からAnimation Windowでの編集画面に移動します。

    もしレコードボタンで作成したアニメーションの場合はクリップに変換します。

    【Unity】Timeline中のAnimationEventを受け取る方法と罠_2
    右クリック -> Convert To Clip Track からAnimationClipに変換してください。

    【Unity】Timeline中のAnimationEventを受け取る方法と罠_3

    Animationウィンドウが表示したら、いつも通りAnimation Eventを追加します。 右クリック -> Add Animation Event からAnimation Eventを追加してください。

    お悩みさん
    お悩みさん
    Unity Timelineの場合レシーバーコンポーネントが追加できない?

    AnimationEventにはレシーバーコンポーネントが必要でした。感覚的にPlayableDirectorと同階層に追加したら良いのかなと思いがちですが違います。

    あくまでAnimatorと同階層にAddComponentしてください。するとAnimationEventからメソッドを選択できるようになります。

    Unity Timelineの動作に合わせてAnimationEventが動作

    AnimationEventを仕込んだらTimelineウィンドウに戻って動作確認します。Editモード中にシークバーを動かしてみましょう。

    【Unity】Timeline中のAnimationEventを受け取る方法と罠_4
    するとAnimationEventで仕込んだメソッドが動作しました。

    Unity TimelineでAnimationEventを仕込む解説は以上です。

    Unity Timeline×AnimationEventまとめ

    本記事ではUnity TimelineとAnimationEventの連携について解説してきました。

    簡単に記事内容をまとめます。

    Unity Timeline×AnimationEventまとめ

    ①AnimationEventはTimelineウィンドウから設定不可

    ②AnimationウィンドウからAnimationEventは設定

    ③AnimationEventにはレシーバーコンポーネントが必要

    ④レシーバーはAnimatorと同階層に追加する

    こんな感じです。

    ゲームで演出を作るときの選択肢としてUnity Timelineはよく候補にあがります。中でもAnimationTrackの使用頻度は高いです。

    AnimationEventとセットで使うことでUnity Timelineをより柔軟に使うことができるため、ぜひ今回紹介した内容は覚えておいていただければと思います。

    オススメ記事
    検証環境
    • Unity6000.0.32f1