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付き、初期状態で非アクティブ)

実行確認方法

  1. 任意のキーで攻撃トリガーを発火(例:Animator.SetTrigger(“Attack"))
  2. Attack.animが再生され、該当フレームでヒットボックスがON/OFF
  3. ステート開始・終了時にコンソールにログ出力

応用可能な例

  • 回避ステート中の当たり判定無効化(無敵)
  • 被ダメージステート終了後に操作可能に戻す
  • SEやエフェクトをフレーム単位で再生
訪問数 3 回, 今日の訪問数 1回

Animation,Unity

Posted by hidepon