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

UnityのタイムラインとAnimationEventを組み合わせた場合の備忘録。

この場合、どうやってAnimationEventを受け取るか?

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

PlayableDirectorではなくAnimator側で受け取る

感覚的にはPlayableDirectorがアタッチされたGameObjectにレシーバーのコンポーネントをくっつけておけばイベントを取得できるかなーなんて思っていましたが、それだと以下のエラーが出ちゃいます。

'AnimationTrackにセットされたGameObject名' AnimationEvent 'AnimationEvent名' has no receiver! Are you missing a component?  

エラー内容から分かるように、AnimationTrackにセットされたGameObjectにレシーバーコンポーネントをくっつけるのが正解です。

これで正しくイベントを受け取ることが出来ます。

バージョンの罠

Unityのバージョンによって、AnimationEventが発火しない致命的なバグが存在します。

Unity Issue Tracker - Event added to animation window, which is linked to sequence editor, doesn't get activated

こちらのissueにあがっていますが、Unity2017.2.0b10からUnity2017.3.1f1までの間はこのバグが存在するためタイムラインによるAnimationEventは使用できません。

Unity2017.3.1p1で対応が入っているので、それ以降のバージョンをお試しください。

Unity - Download Archive

余談

ちなみにAnimationEventをテーマに記事を過去に書いてます。

AnimationEventはAnimationClip自体にイベントを仕込んで、それをプログラム側で取得する、アーティストとプログラマーの作業を分離させてくれる機能といえます。

実績的には、剣を振った時の衝突のタイミングにイベントし込んだりしました。便利っちゃあ便利です。

オススメ記事
検証環境