ガイド使い方読了時間:6分

Godot 4で3Dキャラクターをリギングして動かす: AFK AIアドオン、AnimationPlayer、AnimationTree

FileSystemドックでモデルを選んで「Rig」を押すと、約1分後にアニメーション付きのリギング済みGLBが隣に現れます。歩きや待機はループ設定済みです。

AFK AI (dock)

Signed in as you@example.comSign out

3 of 3 rigs left this month.

Model: hero.glb

Body typeHuman

AnimationsAll animations

FacingAuto

Rig

Rigging...Cancel

Scene › hero_rigged
  • hero_riggedNode3D
  • └Skeleton3DSkeleton3D
  • └HeroMeshInstance3D
  • └AnimationPlayerAnimationPlayer
  • └Idle_Aloop ⟳
  • └Walkloop ⟳
  • └Jogloop ⟳
  • └Sprintloop ⟳
  • └…
スクリーンショットではなく、プラグインをもとに描いた図です。hero.glbをリギング中のAFK AIドックと、その隣に保存されるリギング済みコピー。アニメーションはAnimationPlayerに入っています。

Godotはアニメーションの再生は得意ですが、リグを作る機能はありません。そのため、キャラクターを用意するには外部ツールとの往復が必要です。エクスポートしてBlender(人型だけならMixamoも可)でリギングし、アニメーションを探し、GLBをエクスポートして、インポート後にループするアニメーションをまた一つずつループに設定し直します。

AFK AIアドオンなら、その往復をGodotエディターのドックから行えます。FileSystemドックでモデルをクリックし、Rigを押します。約1分後、hero.glbの隣にhero_rigged.glbが保存されます。体に合わせて作られたスケルトン、ウェイト、そしてAnimationPlayerに入ったアニメーション付きです。待機、歩き、走りはループ設定済みです。

必要なもの

Godot
4.2以降。標準版でも.NET版でもかまいません。
モデル
プロジェクト内の.glb、.gltf、.fbx(50MBまで)。.gltfはすべてのデータが1つのファイルに入っている必要があります。隣に.binがある場合は、代わりに.glbをエクスポートします。
afk.aiアカウント
無料で、Googleでログインします。リギング1回ごとに、アカウントの月間リギング回数を1回分使います。afk.ai/rigと同じです。
インターネット接続
リギングはafk.aiのサーバーで行います。送信されるのは選んだモデルファイルだけです。

アドオンのインストール

  1. Godotプラグインのページからアドオンをダウンロードします。
  2. 中のaddons/afk_aiフォルダーを、プロジェクトのaddonsフォルダーにコピーします。addonsフォルダーがなければ作成します。
  3. Project > Project Settings > Pluginsを開き、AFK AIの横のEnableにチェックを入れます。

右側のInspectorの隣にAFK AIドックが現れます。

モデルをリギングする

  1. ログイン。 AFK AIドックでSign inをクリックします。ブラウザでafk.aiが開くので、Googleでログインします。ドックにメールアドレスと今月の残りリギング回数が表示されます。ブラウザからGodotに戻れない場合は、代わりにログインコードが表示されます。I have a sign-in codeの下に貼り付けて、Useをクリックします。
  2. モデルを選択。 FileSystemドックで、モデルのファイルをクリックします。
  3. オプションを選択。 Body typeは、人や二足歩行のものならHuman、それ以外は該当する動物やクリーチャーを選びます。AnimationsはAll animations、スケルトンだけならRig onlyです。FacingはAutoのままにします。
  4. Rigをクリック。 ドックに処理の状況が表示されます。アップロード、待機、リギング、ダウンロードの順です。その間も作業を続けられます。

完了すると、hero.glbの隣にhero_rigged.glbが保存され、インポートされて選択された状態になります。元のファイルは変更されません。同じモデルをもう一度リギングするとhero_rigged_2.glbになるので、上書きされることはありません。

リギング済みGLBの中身

使うときはhero_rigged.glbをシーンにドラッグします。すべてを子に持つ1つのノードとして追加されます。

Skeleton3D
ボディタイプに合わせて作られたスケルトンで、メッシュがスキニングされています。人型なら、すべての指を含む66本のボーンが入り、pelvis、spine_01、hand_r、foot_lなどの名前が付きます。
AnimationPlayer
すべてのアニメーションが、それぞれの名前で入っています。人型なら最大593種類で、Idle_A、Walk、Jog、Sprint、Jump_Start、Sword_Attack、Dance_Grooveをはじめ、数百種類あります。無料アカウントでは無料のアニメーションのみ、プランに加入するとすべてのアニメーションを利用できます。
ループ
待機、歩き、走り、飛行、泳ぎはループ設定済みです。Godotがインポートする前に、アドオンがファイルのインポート設定に書き込んでいます。
向き
GlTFモデルの標準どおり、キャラクターは+Z方向を向いています。

AnimationPlayerでアニメーションを再生

最もシンプルなプレイヤーキャラクターは、CharacterBody3DにCollisionShape3D(カプセル)を付け、その下にリギング済みモデルをドラッグしてHeroという名前に変えたものです。CharacterBody3Dに次のスクリプトをアタッチします。

extends CharacterBody3D

const SPEED := 4.0
var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")

@onready var hero: Node3D = $Hero
@onready var anim: AnimationPlayer = $Hero/AnimationPlayer

func _physics_process(delta: float) -> void:
	var input := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
	var direction := Vector3(input.x, 0.0, input.y)
	velocity.x = direction.x * SPEED
	velocity.z = direction.z * SPEED
	if not is_on_floor():
		velocity.y -= gravity * delta
	move_and_slide()

	if direction.length() > 0.1:
		# the model faces +Z: turn that toward where it's going
		hero.rotation.y = lerp_angle(hero.rotation.y, atan2(direction.x, direction.z), 10.0 * delta)
		anim.play("Jog", 0.2)   # 0.2 s blend from whatever was playing
	else:
		anim.play("Idle_A", 0.2)

実行すると、矢印キーでキャラクターがジョギングし、キーを離すと滑らかに待機に戻ります。すでに再生中のアニメーションでplayを呼ぶとそのまま再生が続くので、毎フレーム呼んでも問題ありません。

AnimationTreeでブレンドする

AnimationTreeを使うと、速度に応じてアニメーションをブレンドしたり、攻撃のような一度きりの動きを扱ったりできます。エディターで一度だけセットアップします。

  1. キャラクターにAnimationTreeノードを追加します。InspectorでAnim PlayerをHero/AnimationPlayerに、Tree Rootを新しいAnimationNodeStateMachineに設定します。
  2. 下部のAnimationTreeパネルで右クリックし、BlendSpace1Dを追加します。Locomotionという名前を付けて開き、Idle_Aを0、Walkを1.5、Jogを4の位置に置いて、3つのポイントを追加します(Max Spaceは4に設定)。
  3. もう一度右クリックしてSword_Attackアニメーションを追加します。StartからLocomotion、LocomotionからSword_Attackへ接続し、Sword_AttackからLocomotionに戻る接続は、Switch ModeをAt End、Advance ModeをAutoに設定します。
  4. Project > Project Settings > Input Mapでattackというアクションを追加し、キーを割り当てます。

次に、同じスクリプトからanim.playの2行を削除し、代わりにツリーを動かします。

@onready var tree: AnimationTree = $AnimationTree
@onready var playback: AnimationNodeStateMachinePlayback = tree.get("parameters/playback")

func _process(_delta: float) -> void:
	tree.set("parameters/Locomotion/blend_position", Vector2(velocity.x, velocity.z).length())
	if Input.is_action_just_pressed("attack"):
		playback.travel("Sword_Attack")

AnimationTreeが有効な間は、アニメーションを再生するのはAnimationTreeです。AnimationPlayerのplayを併用しないようにします。

StartLocomotionBlendSpace1D · Idle_A, Walk, Jog↓ travel("Sword_Attack")↑ At EndSword_Attack
AnimationTreeのステートマシンの図。LocomotionはIdle_A、Walk、Jogを速度に応じてブレンドし、travel()でSword_Attackに移り、終わると元に戻ります。

剣を持たせる、ループを変更する

キャラクターの手に何かを持たせるには、Skeleton3Dを選択してその下にBoneAttachment3Dを追加し、Bone Nameをhand_rに設定して、剣をアタッチメントの下に置きます。剣はどのアニメーションでも手に追従します。

ループするアニメーションを変更するには、FileSystemドックでhero_rigged.glbをダブルクリックしてAdvanced Import Settingsを開きます。左側のAnimationPlayerの下にあるアニメーションを選び、Loop Modeを変更してReimportをクリックします。

動物、クリーチャー、小物

「Rig」を押す前に、ドックでボディタイプを選びます。犬、猫、オオカミならFox、ひづめのある動物ならHorse、ほかにBird、Dragon、恐竜ならKaiju、Spider、Insect、Snake、Fish、Kangaroo、Frog、Turtle、Ghost、小物ならObjectです。それぞれに体に合わせたスケルトンと、ギャロップ、羽ばたき、咆哮、泳ぎ、這う動きなど、専用のアニメーションが付きます。再生方法は同じで、AnimationPlayerとAnimationTreeをそのまま使えます。同じボディタイプでリギングしたモデルはボーン名もアニメーション名も共通なので、1匹のオオカミ用のAnimationTreeがすべてのオオカミで使えます。各ボディタイプのアニメーションは動物のリギングガイドで紹介しています。

  • ドラゴン
  • 四足歩行
  • ひづめのある動物
  • 恐竜
  • クモ
  • 魚
人型以外の6つのボディタイプをafk.ai/rigでリギングした例です。それぞれに対応したアニメーションを再生しています。

リギング回数のカウント

AFK AIに届いたリギングは、1回ごとに今月のリギング回数を1回分使います。afk.ai/rigやほかのAFK AIプラグインと同じです。Cancelは待機を止めるだけで、リギングは止まらず、回数にもカウントされます。失敗したリギングはカウントされません。回数を使い切ると、ドックにその旨とSee plansが表示され、afk.aiのプランを開けます。

よくある質問

Godotに自動リギング機能は組み込まれていますか?

いいえ。Godotは既存のスケルトンとアニメーションをインポートでき、リターゲット機能で人型スケルトン同士を対応付けることもできますが、メッシュをリギングする機能はありません。その部分をAFK AIアドオンが担い、通常のGLBとしてGodotに渡します。

Godot 3で使えますか?

いいえ。Godot 4.2以降が必要です。Godot 3では、afk.ai/rigでモデルをリギングし、ダウンロードしたGLBをインポートします。

C#プロジェクトで使えますか?

はい。アドオンはGDScriptで書かれていて、Godotの.NET版でも動きます。リギング済みGLBもどちらでも同じです。C#ではGetNode<AnimationPlayer>("Hero/AnimationPlayer").Play("Jog", 0.2);でアニメーションを再生できます。

なぜFBXではなくGLBなのですか?

GLBはGodotが最もきれいにインポートできる形式です。スケルトン、ウェイト、すべてのアニメーションが、Godot 4のどのバージョンでもそのまま読み込まれます。元のモデルはFBXでもかまいませんが、戻ってくるのはGLBです。

アドオンはエクスポートしたゲームに含まれますか?

ゲームで使うのはリギング済みGLBです。アドオン自体はエディター内でしか動作しません。アドオンのファイルをエクスポートから外すには、エクスポートプリセットのResourcesタブでaddons/afk_ai/*を除外します。

複数のモデルを一度にリギングできますか?

一度に1つずつで、それぞれ約1分かかります。フォルダー内のモデルをスクリプトでまとめてリギングするなら、リギングAPIを使います。同じGLBが書き出されます。

リギングしたキャラクターを商用ゲームで使えますか?

はい。スケルトンとアニメーションはCC0で、モデルの権利はそのままご自身に残ります。

Blender、Unity、Unreal用のAFK AIプラグインもありますか?

はい。Blender、Unity、Unreal Engineのガイドを、9つのアプリすべてについてはAFK AIプラグインの概要を参照してください。

モデルをリギングして動かす

ブラウザ上でモデルをアップロードすると、AIがリギングし、数百種類のアニメーションをその場で再生できます。どのエンジンでも使えるGLBファイルにまとめてダウンロードできます。

モデルをリギング

ほかのガイド