ゲームプログラマーの悟です
この記事では
- AnimationEventが呼ばれない
- 調べてみても初歩的なところで間違えていそうで違う気がする
- 公式のドキュメントを読んだけど解決しない
という人のために、実際に悟も躓いたココ見てみてはいかがでしょうを紹介します
私もX(旧Twitter)でつぶやいたものになります
結論 アニメーション切り替えタイミングでEventが反応していない
アニメーション遷移の設定で、別のステートからステートへ切り替わる際のブレンドをすぐに切り替えていませんか?
画像のようになっている場合、「run-Animation」の後半が 「Idle-Animation」に切り替わっているためAnimationで指定したAnimationEventが遷移の影響で反応していないことがあります
上記の図のように修正すると、AnimationEventが動くようになります
Animationが最後まで再生されず次に遷移しているため動いていません
詳細を解説します
前提条件
1.2つ以上のアニメーションがトランジションでつながっている
2.トランジションのインスペクターを変更している
3.遷移前のアニメーションでAnimationEventを設定している
4.Playerに以下のPlayerクラスのスクリプトがアタッチされている
※ご自身の環境に当てはめて見て下さい
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
private Animator _animator;
private void Awake()
{
TryGetComponent(out _animator);
}
public void SomeExample()
{
Debug.Log("SomeExampleが呼ばれました");
}
private void Update()
{
if (Input.GetKeyDown("space"))
{
_animator.SetTrigger("isRun");
}
}
}
なぜ、動かないのか?
まずは、インスペクターで調整したものを見てみましょう
Animatorの問題が起こっているトランジションを選択してインスペクターを見てみると、
このようにしている場合があると思います
矢印で指している場所は、再生されていません
イメージで表すとこのAnimationの赤い部分が再生されていないので、AnimationEventが発生していません
実際に、この状態で実行してみると、
何も描画されません
そこで、Animatorのトランジションを選びインスペクターに
表示される切り替えタイミングを変更します
もう一度実行してみると
動きました!!
最後に
今回は2DAnimationEventが呼ばれない時の対処法について紹介しました
初歩的ですが、Unityは様々なところで設定を変更して意図しない動きになるケースが多いので
参考になれば幸いです
コメント