教學教學閱讀約 6 分鐘
在 Godot 4 中為 3D 角色綁定骨架並製作動畫: AFK AI 附加元件、AnimationPlayer 與 AnimationTree
在 FileSystem 面板中點選模型,按下 Rig,大約一分鐘後旁邊就會出現一個帶有動畫的已綁定骨架 GLB,走路和待機動畫也已設為循環。
Signed in as you@example.comSign out
3 of 3 rigs left this month.
Model: hero.glb
Body typeHuman
AnimationsAll animations
FacingAuto
RigRigging...Cancel
- hero_riggedNode3D
- └Skeleton3DSkeleton3D
- └HeroMeshInstance3D
- └AnimationPlayerAnimationPlayer
- └Idle_Aloop ⟳
- └Walkloop ⟳
- └Jogloop ⟳
- └Sprintloop ⟳
- └…
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 的伺服器上進行。只會傳送你選取的模型檔案。
安裝附加元件
- 從 Godot 外掛程式頁面下載附加元件。
- 把其中的
addons/afk_ai資料夾複製到專案的addons資料夾。如果專案沒有addons資料夾,就自己建立一個。 - 開啟 Project > Project Settings > Plugins,勾選 AFK AI 旁的 Enable。
右側 Inspector 旁邊會出現 AFK AI 面板。
綁定模型骨架
- 登入。 在 AFK AI 面板中按下 Sign in。瀏覽器會開啟 afk.ai,在那裡用 Google 帳號登入。面板會顯示你的電子郵件,以及本月剩餘的綁定次數。如果瀏覽器無法回到 Godot,會改為顯示登入代碼:把它貼到 I have a sign-in code 底下,然後按下 Use。
- 選擇模型。 在 FileSystem 面板中點選模型檔案。
- 設定選項。 Body type:人物和任何用兩隻腳走路的角色選 Human,否則選對應的動物或生物。Animations:All animations,或只要骨架的 Rig only。Facing:保持 Auto。
- 按下 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 能依速度在動畫之間混合,也能處理攻擊這類一次性的動作。在編輯器中設定一次即可:
- 在角色上加入一個 AnimationTree 節點。在 Inspector 中把 Anim Player 設為
Hero/AnimationPlayer,Tree Root 設為新的 AnimationNodeStateMachine。 - 在底部的 AnimationTree 面板中按右鍵,加入一個 BlendSpace1D。命名為
Locomotion,開啟它並加入三個點:Idle_A 在 0、Walk 在 1.5、Jog 在 4(把它的 Max Space 設為 4)。 - 再按一次右鍵,加入 Sword_Attack 動畫。把 Start 連到 Locomotion,Locomotion 連到 Sword_Attack,再把 Sword_Attack 連回 Locomotion,並把 Switch Mode 設為 At End、Advance Mode 設為 Auto。
- 在 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。
讓角色握劍、修改循環設定
要讓角色手上拿東西,選取它的 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 的綁定都會用掉本月的一次綁定次數,和在 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,任何引擎都能用。
更多教學
教學
在 Blender 中自動綁定角色骨架:免費的 AFK AI 附加元件
選取模型、按下 Rig,大約一分鐘後,旁邊就會出現一份已綁定骨架並帶有動畫的副本。適用 Blender 4.2 以上版本。
教學
在 Unreal Engine 5 中自動綁定角色骨架:從靜態網格到有動畫的骨架網格
對網格按右鍵,選擇 Rig with AFK AI,一分鐘後同一個資料夾中就會出現帶有骨架、物理資產和動畫的骨架網格。
教學
在 Unity 中幫任何 3D 模型自動綁定骨架:直接設為 Humanoid,附帶動畫片段
在 Project 視窗中選取模型並按下 Rig。一分鐘後,旁邊就會出現一個已綁定骨架的 FBX,設為 Humanoid,每個動畫都是一個片段。