教學教學閱讀約 6 分鐘

在 Godot 4 中為 3D 角色綁定骨架並製作動畫: AFK AI 附加元件、AnimationPlayer 與 AnimationTree

在 FileSystem 面板中點選模型,按下 Rig,大約一分鐘後旁邊就會出現一個帶有動畫的已綁定骨架 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 ⟳
  • └…
依外掛程式繪製的示意圖,不是截圖:AFK AI 面板正在幫 hero.glb 綁定骨架,以及它存放在旁邊的綁定複本,動畫放在 AnimationPlayer 中。

Godot 很擅長播放動畫,卻沒辦法製作骨架。所以角色通常得繞一圈:匯出模型、在 Blender(或只支援人形的 Mixamo)中綁定骨架、找動畫、匯出 GLB,匯入後還得把每個循環動畫重新設為循環。

AFK AI 附加元件讓你在 Godot 編輯器的一個面板中就走完這一圈。在 FileSystem 面板中點選模型,再按 Rig。大約一分鐘後,hero_rigged.glb 就會儲存在 hero.glb 旁邊,帶有依身體打造的骨架、蒙皮權重,以及放在 AnimationPlayer 中的動畫。待機、走路和跑步動畫都已設為循環。

準備事項

Godot
4.2 以上版本,標準版或 .NET 版都可以。
你的模型
專案中最大 50 MB 的 .glb、.gltf 或 .fbx。.gltf 必須把所有資料放在同一個檔案中;如果旁邊還有 .bin,請改為匯出 .glb。
afk.ai 帳號
免費,以 Google 登入。每次綁定都會用掉帳號當月的一次綁定次數,和在 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_rigged.glb 會儲存在 hero.glb 旁邊,並已匯入和選取。原始檔案不會被改動。同一個模型再綁定一次,會得到 hero_rigged_2.glb,不會覆蓋任何東西。

已綁定骨架的 GLB 裡有什麼

把 hero_rigged.glb 拖進場景就能使用:它會以一個節點的形式出現,所有內容都在它底下。

Skeleton3D
依模型類型打造的骨架,你的網格已蒙皮到上面。人形角色有 66 根骨骼,包含每根手指,名稱為 pelvis、spine_01、hand_r、foot_l 等等。
AnimationPlayer
所有動畫,各有自己的名稱。人形角色最多有 593 種:Idle_A、Walk、Jog、Sprint、Jump_Start、Sword_Attack、Dance_Groove,還有數百種其他動畫。免費帳號可以使用免費動畫,付費方案則能解鎖其餘全部。
循環
待機、走路、跑步、飛行和游泳動畫都已設為循環。附加元件會在 Godot 匯入之前,把這些設定寫進檔案的匯入設定中。
朝向
角色面向 +Z,和一般 glTF 模型相同。

用 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(把它的 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,改為驅動動畫樹:

@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 啟用期間,動畫是由它負責播放,所以不要同時呼叫 AnimationPlayer 的 play。

StartLocomotionBlendSpace1D · Idle_A, Walk, Jog↓ travel("Sword_Attack")↑ At EndSword_Attack
示意圖:AnimationTree 的狀態機。Locomotion 依速度混合 Idle_A、Walk 和 Jog;travel() 會切換到 Sword_Attack,播放結束後再回到 Locomotion。

讓角色握劍、修改循環設定

要讓角色手上拿東西,選取它的 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。綁定為同一種模型類型的模型,骨骼和動畫名稱都相同,所以一隻狼的 AnimationTree 能用在每一隻狼身上。動物教學列出了每種類型的動畫。

  • 龍
  • 四足動物
  • 有蹄動物
  • 恐龍
  • 蜘蛛
  • 魚
另外六種體型,在 afk.ai/rig 上綁骨後播放各自的動畫。

怎樣算一次綁定

每次送達 AFK AI 的綁定都會用掉本月的一次綁定次數,和在 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); 播放動畫。

為什麼是 GLB 而不是 FBX?

GLB 是 Godot 匯入效果最好的格式:在每個 Godot 4 版本中,骨架、蒙皮權重和每個動畫都能原封不動地匯入。你的原始檔案可以是 FBX,傳回來的則是 GLB。

附加元件會出現在匯出的遊戲中嗎?

遊戲用到的是綁定好的 GLB。附加元件本身只在編輯器中運作;如果想把它的檔案排除在匯出之外,在匯出預設設定的 Resources 分頁中排除 addons/afk_ai/*。

可以一次綁定好幾個模型嗎?

一次一個,每個大約一分鐘。如果想用腳本綁定整個資料夾,請使用骨架綁定 API:它產生的 GLB 完全相同。

綁定好的角色可以用在商業遊戲中嗎?

可以。骨架和動畫都是 CC0,你的模型仍然屬於你。

Blender、Unity 或 Unreal 也有 AFK AI 外掛程式嗎?

有。請參閱 Blender、Unity 和 Unreal Engine 的教學,以及涵蓋全部九款軟體的 AFK AI 外掛程式總覽。

幫你的模型綁骨、製作動畫

AI 在你的瀏覽器中為它綁骨,然後數百個動畫就能在它身上播放。下載一個 GLB,任何引擎都能用。

幫模型綁骨

更多教學