はじめに
前回のAnimationPlayerは「単一のアニメーションを再生する」ノードでした。しかし実際のゲーム開発では、キャラクターが複数の状態(待機→歩行→走行→ジャンプ)を切り替え、スムーズに遷移する必要があります。
そこで登場するのがAnimationTree。状態管理と複雑なアニメーション遷移を効率化するノードです。
この記事では以下を学べます:
- AnimationTreeの基本概念
- StateMachine(状態機械)でアニメーション切り替え
- BlendSpaceで複数アニメーションをブレンド
- パラメーター経由での状態制御

AnimationTreeとは?
AnimationTreeは、複数のアニメーション状態を管理し、スムーズに遷移させるノードです。
「状態機械(StateMachine)」として、キャラクターが「idle(待機)」→「walk(歩行)」→「run(走行)」と遷移するロジックを構築できます。
継承ツリー:
AnimationTree
↑
AnimationMixer
↑
Node
↑
Object
重要:AnimationTreeは必ずAnimationPlayerと組み合わせて使うノードです。AnimationTreeは「制御層」、AnimationPlayerは「再生層」として機能します。
このノードを使うべき場面
使う場面:
- キャラクターの状態遷移管理(idle → walk → run など)
- 複数アニメーションのブレンド(walk と run をスムーズに繋ぐ)
- パラメーター経由でのアニメーション制御(速度によって歩行速度を自動調整)
- 複雑な敵AIのアニメーション制御
- キャラクター動作の効率的な管理
使わない場面:
- シンプルなアニメーション単発再生 → AnimationPlayerで十分
- UIアニメーション(一度きりの演出) → AnimationPlayerを使う
主なプロパティと機能
| プロパティ/メソッド | 型・戻り値 | 説明 |
|---|---|---|
tree_root |
AnimationNode | ツリーのルートノード(StateMachine や BlendSpace など) |
anim_player |
NodePath | 制御対象のAnimationPlayerノードへのパス |
active |
bool | AnimationTreeの有効フラグ |
get("parameters/… |
varies | パラメーターを取得(例:get("parameters/conditions/is_running")) |
set("parameters/… |
void | パラメーターを設定(例:set("parameters/conditions/is_running", true)) |
コード例1:StateMachineを使った状態遷移
extends CharacterBody2D
@onready var animation_tree = $AnimationTree
@onready var playback = animation_tree.get("parameters/playback")
func _process(_delta):
# キー入力を検知
var is_running = Input.is_action_pressed("ui_shift")
var direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
# パラメーターを設定(AnimationTreeの状態を更新)
animation_tree.set("parameters/conditions/is_running", is_running)
animation_tree.set("parameters/conditions/is_moving", direction.length() > 0)
# 実際の移動処理
if direction:
velocity = direction * 200.0
else:
velocity = Vector2.ZERO
move_and_slide()
コード例2:BlendSpaceで速度に応じたアニメーション選択
extends CharacterBody2D
@onready var animation_tree = $AnimationTree
@export var walk_speed = 100.0
@export var run_speed = 300.0
func _process(delta):
var direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
var is_running = Input.is_action_pressed("ui_shift")
# 移動速度を決定
var target_speed = run_speed if is_running else walk_speed
var speed = target_speed if direction else 0.0
# BlendSpaceに速度パラメーターを渡す
animation_tree.set("parameters/blendspace1d/blend_position", speed / run_speed)
velocity = direction * speed
move_and_slide()

もっと使いこなす:カスタマイズできるパラメータ
| 概念 | 説明 | 用途 |
|---|---|---|
| StateMachine | 複数の「状態」と「遷移条件」を管理 | idle・walk・jump・attack など、複数の状態を明確に分ける |
| BlendSpace1D | 1つのパラメーター(例:速度)で複数アニメーションをブレンド | walk と run をスムーズに繋ぐ(速度 0 で walk、100 で run) |
| BlendSpace2D | 2つのパラメーター(例:速度と方向)でブレンド | 8方向移動で最適なアニメーションを自動選択 |
| パラメーター | set("parameters/condition/name", value)で動的に更新 |
スクリプトから状態遷移条件を制御 |
| 遷移条件 | 「AからBに遷移する条件」を Condition ノードで定義 | is_running == true で Idle から Run に遷移、など |
まとめ
一言要約:AnimationTreeは、複数のアニメーション状態を効率的に管理し、スムーズに遷移させるノードです。キャラクター制御に必須。
ポイント:
- AnimationPlayerと組み合わせて使い、AnimationTreeが「制御層」となる
- StateMachineで明確な状態遷移を設計し、Conditionで条件を定義
- パラメーター経由でスクリプトから動的に状態遷移を制御できる
次回予告:次はAudioStreamPlayerを解説します。ゲームの背景音楽や効果音を再生する方法が分かります。
シリーズ:Godot 4 ノード解説
- 001-040: 基本ノード(準備中)
- 041:StaticBody2D
- 042:TileMapLayer
- 043:AnimationPlayer
- 044:AnimationTree
- 045:AudioStreamPlayer
- 046:AudioStreamPlayer2D
- 047:GPUParticles2D
- 048:CPUParticles2D
- 049:Line2D
- 050:CanvasLayer
この記事はGodot 4.xをもとに執筆しています。


コメント