StateMachineBehaviourとアニメーションイベントの活用
目次
概要
このテンプレートでは、以下の2つのアニメーション制御手法を学ぶことができます:
- StateMachineBehaviour:ステートの開始・終了で処理を行う
- アニメーションイベント:特定フレームでメソッドを呼び出す
プロジェクト構成例
Assets/
├── Animations/
│ ├── Attack.anim ← アニメーションイベント付き
│ └── Idle.anim
├── Animator/
│ └── PlayerAnimator.controller ← ステートマシンにBehaviourを追加
├── Scripts/
│ ├── PlayerAttack.cs ← アニメーションイベント用スクリプト
│ ├── AttackState.cs ← StateMachineBehaviourスクリプト
├── Prefabs/
│ └── Player.prefab ← Animator付きプレハブ
└── Scenes/
└── Main.unity
1. アニメーションイベントの活用例
スクリプト:PlayerAttack.cs
using UnityEngine;
public class PlayerAttack : MonoBehaviour
{
public GameObject hitBox;
// アニメーションイベントから呼び出すメソッド
public void EnableHitBox()
{
hitBox.SetActive(true);
Debug.Log("ヒットボックス有効化");
}
public void DisableHitBox()
{
hitBox.SetActive(false);
Debug.Log("ヒットボックス無効化");
}
}
アニメーション設定方法
- Attack.animをAnimationウィンドウで開く
- 該当フレームでイベントを挿入
- メソッド名:EnableHitBox
- 別フレームに:DisableHitBox
2. StateMachineBehaviourの活用例
スクリプト:AttackState.cs
using UnityEngine;
public class AttackState : StateMachineBehaviour
{
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
Debug.Log("攻撃ステート開始");
}
public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
Debug.Log("攻撃ステート終了");
}
}
Animator設定手順
- PlayerAnimator.controllerを開く
- Attackステートを選択し、右インスペクターの「Add Behaviour」からAttackStateを追加
プレハブ構成:
Player
- コンポーネント:
- Animator(Controller:PlayerAnimator.controller)
- PlayerAttack(hitBoxに子オブジェクトをアサイン)
- 子オブジェクト:
- HitBox(BoxCollider付き、初期状態で非アクティブ)
実行確認方法
- 任意のキーで攻撃トリガーを発火(例:Animator.SetTrigger(“Attack"))
- Attack.animが再生され、該当フレームでヒットボックスがON/OFF
- ステート開始・終了時にコンソールにログ出力
応用可能な例
- 回避ステート中の当たり判定無効化(無敵)
- 被ダメージステート終了後に操作可能に戻す
- SEやエフェクトをフレーム単位で再生
訪問数 3 回, 今日の訪問数 1回
ディスカッション
コメント一覧
まだ、コメントがありません