Godot入門:AnimationTreeの使い方と活用法

はじめに

前回のAnimationPlayerは「単一のアニメーションを再生する」ノードでした。しかし実際のゲーム開発では、キャラクターが複数の状態(待機→歩行→走行→ジャンプ)を切り替え、スムーズに遷移する必要があります。

そこで登場するのがAnimationTree。状態管理と複雑なアニメーション遷移を効率化するノードです。

この記事では以下を学べます:

  • AnimationTreeの基本概念
  • StateMachine(状態機械)でアニメーション切り替え
  • BlendSpaceで複数アニメーションをブレンド
  • パラメーター経由での状態制御




AnimationTreeの概略図
AnimationTreeは複数のアニメーション状態を管理し、状態遷移を制御

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()




AnimationTreeエディタ:StateMachine
ビジュアルエディタで状態遷移を設計し、条件を設定する

もっと使いこなす:カスタマイズできるパラメータ

概念 説明 用途
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をもとに執筆しています。

コメント