こんにちは、Unityエンジニアのオオバです。
UnityのタイムラインとAnimationEventを組み合わせた場合の備忘録。
- AnimationEventを仕込んだAnimationClipを用意
- AnimationTrackに先のAnimationClipをセット
この場合、どうやってAnimationEventを受け取るか?
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
PlayableDirectorではなくAnimator側で受け取る
感覚的にはPlayableDirectorがアタッチされたGameObjectにレシーバーのコンポーネントをくっつけておけばイベントを取得できるかなーなんて思っていましたが、それだと以下のエラーが出ちゃいます。
'AnimationTrackにセットされたGameObject名' AnimationEvent 'AnimationEvent名' has no receiver! Are you missing a component?
エラー内容から分かるように、AnimationTrackにセットされたGameObjectにレシーバーコンポーネントをくっつけるのが正解です。
これで正しくイベントを受け取ることが出来ます。
バージョンの罠
Unityのバージョンによって、AnimationEventが発火しない致命的なバグが存在します。
こちらのissueにあがっていますが、Unity2017.2.0b10からUnity2017.3.1f1までの間はこのバグが存在するためタイムラインによるAnimationEventは使用できません。
Unity2017.3.1p1で対応が入っているので、それ以降のバージョンをお試しください。
余談
ちなみにAnimationEventをテーマに記事を過去に書いてます。
AnimationEventはAnimationClip自体にイベントを仕込んで、それをプログラム側で取得する、アーティストとプログラマーの作業を分離させてくれる機能といえます。
実績的には、剣を振った時の衝突のタイミングにイベントし込んだりしました。便利っちゃあ便利です。
この記事が気に入ったらフォローしよう
オススメ記事
検証環境
- Unity2017.3.1p4