【Unreal Engine】Animation Blueprintの基本:State MachineとBlend Spaceの使い方

作成: 2025-12-12

キャラクターアニメーションを制御するAnimation Blueprintの基本構造を紹介。State Machineによる状態遷移の管理、Blend Space 1D/2Dによる滑らかなアニメーション補間、Event GraphとAnim Graphの役割分担について整理。

Animation Blueprintが必要な理由

Unreal Engineでキャラクターを動かし始めたとき、以下のような問題に直面していませんか?

  • 「待機(Idle)」から「歩行(Walk)」に切り替わる瞬間が不自然で、アニメーションが急に飛んだように見える。
  • 「歩行」と「走行(Run)」のアニメーションを切り替えるために、複雑な条件分岐(Branch)ノードを大量に使ってしまい、Blueprintがごちゃごちゃになっている。
  • ジャンプや攻撃などの特殊な動作を、移動アニメーションとどう両立させればいいか分からない。

これらの問題は、Unreal Engineのアニメーションシステムの中核であるAnimation Blueprint (AnimBP)State MachineBlend Space の役割と使い分けを理解することで、劇的に改善できます。

本記事では、UE初心者から中級者を目指す方に向けて、この2つの強力なツールがどのように連携し、プロのような滑らかで効率的なキャラクターアニメーションを実現するのかを、具体的なBlueprintの例を交えて徹底的に解説します。

Animation Blueprintとは

Animation Blueprintは、キャラクターの骨格(スケルトン)に対して、どのタイミングでどのアニメーションを、どのようなブレンド(合成)で適用するかを制御するための特別なBlueprintです。

AnimBPは主に2つのグラフで構成されています。

  1. Event Graph (イベントグラフ): キャラクターの速度やジャンプ中かどうかといったゲームプレイの情報を取得し、それらの値をアニメーションロジックに渡すための処理を行います。
  2. Anim Graph (アニメーショングラフ): 実際にアニメーションをブレンドしたり、State Machineを配置したりして、最終的なポーズを決定するロジックを構築します。

このAnim Graphの中で、キャラクターの「状態」を管理するのがState Machine、「状態内での滑らかな遷移」を管理するのがBlend Space です。

State Machineの基礎と役割

State Machine(ステートマシン) は、キャラクターが現在どのような「状態」にあるかを定義し、その状態間の「遷移(トランジション)」を管理する仕組みです。

状態(State)とは

状態とは、キャラクターの特定の動作パターンを指します。例えば、以下のようなものが状態として定義されます。

  • Idle/Run (待機/走行): 地面を移動している状態
  • Jump (ジャンプ): 空中にいる状態
  • Attack (攻撃): 攻撃動作をしている状態
  • Death (死亡): 死亡している状態

遷移(Transition)とは

遷移は、ある状態から別の状態へ切り替わるための「条件」を定義します。

例えば、「Idle/Run」状態から「Jump」状態へ遷移するための条件は、「IsInAir変数がTrueになったとき」となります。逆に、「Jump」状態から「Idle/Run」状態へ戻る条件は、「IsInAir変数がFalseになったとき(地面に着地したとき)」となります。

💡 IsFallingとIsInAirの違い

Character Movement ComponentIsFalling()は、キャラクターが落下中のときのみTrueを返します(上昇中はFalse)。ジャンプ全体(上昇+落下)を判定したい場合は、IsMovingOnGround()の否定(!IsMovingOnGround())を使用するか、独自のIsInAir変数を管理することをお勧めします。

【State Machineのベストプラクティス】

State Machineは、動作が根本的に異なる、またはアブノーマルな(急激な)切り替え が必要な場合に最適です。

状態遷移の例適切な理由
Idle/Run → Jump動作パターンが「地上」から「空中」へ根本的に変化するため
Any State → Death優先度の高い、即座に発生すべき状態変化のため
Idle → Attack攻撃中は移動ロジックを一時停止する必要があるため

💡 Death状態の設計について

「Any State → Death」のような遷移は、多くのプロジェクトで復活しない前提の最終状態 として特別扱いされます。Death状態からは他の状態への遷移を設けない(または「復活」イベントでのみ遷移可能にする)設計が一般的です。

Blend Spaceの基礎と役割

Blend Space(ブレンドスペース) は、複数のアニメーションを一つのアセット内で定義し、特定の入力値(パラメータ)に基づいてそれらを滑らかに合成(ブレンド) するための仕組みです。

1Dと2Dのブレンド

Blend Spaceには、主に以下の2種類があります。

  • Blend Space 1D: 1つのパラメータ(例:速度)に基づいてアニメーションをブレンドします。
    • 例:速度0でIdle、速度300でWalk、速度600でRunのアニメーションを配置し、速度に応じて滑らかに遷移させます。
  • Blend Space (2D): 2つのパラメータ(例:速度と方向)に基づいてアニメーションをブレンドします。
    • 例:移動速度と、キャラクターの向きに対する移動方向(フォワード、バック、レフト、ライト)をブレンドし、8方向移動やストレイフ移動を実現します。

💡 移動方向の取得方法

2D Blend Spaceで使用する「方向(Direction)」は、Calculate Direction ノードで取得できます。このノードは、Velocityベクトルとキャラクターの向き(Rotation)から、-180〜180度の範囲で移動方向を計算します。また、ストレイフ移動(キャラクターの向きと移動方向が独立)を実装する場合は、Character Movement ComponentのOrient Rotation to Movement をOffにする必要があります。

Blend Spaceの仕組み

Blend Spaceアセットを作成すると、X軸(2Dの場合はY軸も)にパラメータの範囲(例:Min 0, Max 600)を設定します。このグリッド上に、対応するアニメーション(例:Idle、Walk、Run)を配置するだけで、Unreal Engineが自動的にその間の補間(ブレンド)を行ってくれます。

💡 補間設定(Axis Settings)について

Blend SpaceのAxis Settings では、Interpolation Time(補間時間)を設定できます。この値を調整することで、急な入力変化に対してアニメーションがどれだけ滑らかに追従するかを制御できます。値が小さいほど即座に反応し、大きいほど滑らかになります。

【Blend Spaceのベストプラクティス】

Blend Spaceは、同じ動作カテゴリ内での滑らかな変化 が必要な場合に最適です。

動作変化の例適切な理由
Idle ↔ Walk ↔ Run速度という単一のパラメータで、地上移動という同じカテゴリ内で滑らかに変化するため
Aiming (上下左右)2つのパラメータ(PitchとYaw)で、上半身のポーズを滑らかに合成するため

State MachineとBlend Spaceの連携

State MachineとBlend Spaceは、対立するものではなく、連携して使用する ことで最も効率的なアニメーション構造を構築できます。

構造の基本

最も一般的なキャラクターアニメーションの構造は以下のようになります。

  1. State Machine で、キャラクターの大まかな状態 (地上移動、ジャンプ、攻撃など)を切り替えます。
  2. 「地上移動」などの状態(State)の中 に、Blend Space を配置します。
  3. Blend Space内で、その状態内での滑らかな変化 (Idle ↔ Run)を処理します。

これにより、「ジャンプ」という急激な状態変化はState Machineが担当し、「歩く速さの変化」という滑らかな変化はBlend Spaceが担当するという、役割分担が明確になります。

実践的なBlueprint例

ここでは、キャラクターの地上移動(Idle ↔ Run)を制御するための基本的なAnim Graphの構成を見てみましょう。

ステップ1:Event Graphで必要な変数を取得する

まず、Event Graphでキャラクターの速度とジャンプ状態を取得し、AnimBPの変数に格納します。

Blueprint (Event Graph) の例:

// 1. Try Get Pawn Owner (所有者であるPawnを取得)
// 2. Is Valid (Pawnが有効かチェック)
// 3. Get Velocity (速度ベクトルを取得)
// 4. Vector Length (ベクトルの長さを計算 = 速度)
// 5. Set Speed (計算した速度をAnimBPのfloat変数 'Speed' に設定)
// 6. Character Movement Component を取得
// 7. Is Moving On Ground (地面に接地しているかチェック)
// 8. NOT ノードで反転し IsInAir を取得
// 9. Set IsInAir (結果をAnimBPのbool変数 'IsInAir' に設定)

ステップ2:Anim GraphでState Machineを構築する

Anim GraphにState Machineノードを配置し、基本的な「地上移動」と「ジャンプ」の状態を定義します。

State Machineの構成:

  1. EntryIdle/Run (初期状態)
  2. Idle/RunJump Start (遷移条件: IsInAir が True)
  3. Jump StartIdle/Run (遷移条件: IsInAir が False)

ステップ3:Idle/Run State内にBlend Spaceを配置する

「Idle/Run」状態をダブルクリックして中に入り、作成済みのBlend Space 1Dアセット(例:BS_Idle_Walk_Run)を配置します。

Blueprint (Idle/Run State内) の例:

// 1. Blend Space 1D アセット (BS_Idle_Walk_Run) を配置
// 2. Blend Spaceの入力ピンに Event Graphで取得した 'Speed' 変数を接続
// 3. 結果を Final Animation Pose に接続

このシンプルな構造により、State Machineは「地上にいるか、空中にいるか」という大きな判断を担い、Blend Spaceは「地上にいるときの速度に応じた滑らかなアニメーション」を担うことになります。

よくある間違いとベストプラクティス

よくある間違い

間違い説明解決策
Blend Spaceの乱用ジャンプや攻撃など、急激な動作変化をBlend Spaceで無理にブレンドしようとする。State Machine で状態を切り替えるべきです。Blend Spaceはあくまで同じカテゴリ内の滑らかな遷移に限定します。
遷移条件の複雑化State Machineの遷移条件(Transition Rule)に、大量のノードや複雑な計算を直接書き込む。遷移条件はシンプルに保ち、複雑な計算はEvent Graph で行い、結果を変数として渡すべきです。
Montageとの混同攻撃や被弾など、一時的で割り込みが必要なアニメーションをState Machineだけで処理しようとする。攻撃や被弾、ドアを開けるなどの一時的な動作には、Anim Montage を使用し、State Machineの上位レイヤーで再生すべきです。

ベストプラクティス

  1. Event GraphとAnim Graphの役割分担を徹底する:
    • Event Graph: ゲームロジック(速度、入力、状態)から情報を取得し、Anim Graph用の変数に格納する。
    • Anim Graph: 渡された変数を使って、State MachineやBlend Spaceなどのアニメーションロジックを構築する。
  2. State Machineは「アブノーマルな変化」に使う:
    • 地上 ↔ 空中、通常 ↔ 死亡、通常 ↔ 攻撃など、動作の性質が大きく変わる部分に限定します。
  3. Blend Spaceは「滑らかな変化」に使う:
    • 速度や方向、照準の角度など、連続的な値に基づいてアニメーションを補間したい場合にのみ使用します。

Animation Blueprintの活用ポイント

本記事では、Unreal EngineのAnimation BlueprintにおけるState MachineBlend Space の基本的な役割と、それらを連携させて効率的なアニメーションロジックを構築する方法を解説しました。

要素役割最適な使用例
State Machineキャラクターの大まかな状態 を定義し、急激な遷移 を管理する。地上移動 ↔ ジャンプ、通常 ↔ 死亡
Blend Space同じ状態内 で、入力値に基づいて複数のアニメーションを滑らかに合成 する。Idle ↔ Walk ↔ Run、照準の上下左右の動き

この2つの概念を正しく理解し、適切に使い分けることが、Unreal Engineでプロ品質のキャラクターアニメーションを実現するための鍵となります。まずはシンプルなIdle/Walk/RunのBlend Spaceを作成し、それをState Machineに組み込むことから始めてみましょう。

さあ、あなたのキャラクターを「カクカク」から卒業させ、命を吹き込みましょう!