Hướng dẫnCách làm6 phút đọc

Rig và tạo chuyển động cho nhân vật 3D trong Godot 4: Add-on AFK AI, AnimationPlayer và AnimationTree

Chọn model trong dock FileSystem, bấm Rig, khoảng một phút sau file GLB đã rig kèm animation nằm ngay cạnh, các animation đi bộ và idle đã lặp sẵn.

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 ⟳
  • └…
Hình vẽ mô phỏng plugin, không phải ảnh chụp màn hình: dock AFK AI khi đang rig hero.glb, và bản sao đã rig được lưu cạnh file đó, với các animation nằm trong một AnimationPlayer.

Godot phát animation rất tốt nhưng không có cách nào tạo bộ rig. Vì thế một nhân vật thường phải đi một vòng: xuất ra, rig trong Blender (hoặc Mixamo, chỉ cho nhân vật dạng người), đi tìm animation, xuất GLB, rồi sau khi nhập vào Godot lại phải bật lặp cho từng animation lặp.

Add-on AFK AI đi trọn vòng đó từ một dock trong editor của Godot. Bấm vào model trong dock FileSystem, rồi bấm Rig. Khoảng một phút sau, hero_rigged.glb được lưu cạnh hero.glb, với bộ xương làm riêng cho cơ thể của nó, skin weight và các animation nằm trong một AnimationPlayer. Các animation idle, đi bộ và chạy đã được đặt lặp sẵn.

Bạn cần gì

Godot
4.2 trở lên, bản tiêu chuẩn hoặc bản .NET.
Model của bạn
File .glb, .gltf hoặc .fbx trong dự án, tối đa 50 MB. File .gltf phải chứa mọi thứ trong một file; nếu có file .bin đi kèm, hãy xuất sang .glb.
Tài khoản afk.ai
Miễn phí, đăng nhập bằng Google. Mỗi lần rig dùng một lượt rig trong tháng của tài khoản, giống như trên afk.ai/rig.
Internet
Việc rig chạy trên máy chủ của afk.ai. Chỉ file model bạn chọn được gửi đi.

Cài add-on

  1. Tải add-on về từ trang plugin cho Godot.
  2. Chép thư mục addons/afk_ai của nó vào thư mục addons của dự án. Nếu dự án chưa có thư mục addons thì tạo mới.
  3. Mở Project > Project Settings > Plugins và tích Enable cạnh AFK AI.

Dock AFK AI sẽ xuất hiện ở bên phải, cạnh Inspector.

Rig một model

  1. Đăng nhập. Bấm Sign in trong dock AFK AI. Trình duyệt mở afk.ai; đăng nhập bằng Google ở đó. Dock hiện email của bạn và số lượt rig còn lại trong tháng. Nếu trình duyệt không quay lại được Godot, trang sẽ hiện mã đăng nhập: dán mã vào mục I have a sign-in code rồi bấm Use.
  2. Chọn model. Trong dock FileSystem, bấm vào file của model.
  3. Chọn tùy chọn. Body type: Human cho người và mọi thứ đi hai chân, hoặc đúng loài động vật hay sinh vật của model. Animations: All animations, hoặc Rig only nếu chỉ cần bộ xương. Facing: để Auto.
  4. Bấm Rig. Dock cho biết đang làm gì: tải lên, chờ, rig, tải về. Trong lúc đó bạn cứ làm việc tiếp.

Khi xong, hero_rigged.glb được lưu cạnh hero.glb, đã được nhập và chọn sẵn. Bản gốc không bị đụng tới. Rig lại cùng model thì bạn được hero_rigged_2.glb, nên không có gì bị ghi đè.

Trong file GLB đã rig có gì

Kéo hero_rigged.glb vào scene để dùng: nó vào dưới dạng một node duy nhất, mọi thứ nằm bên dưới.

Skeleton3D
Bộ xương làm cho kiểu cơ thể, mesh của bạn đã được skin vào đó. Nhân vật người có 66 xương, đủ cả từng ngón tay, đặt tên pelvis, spine_01, hand_r, foot_l, v.v.
AnimationPlayer
Mọi animation, mỗi cái một tên riêng. Với nhân vật dạng người là tới 593 animation: Idle_A, Walk, Jog, Sprint, Jump_Start, Sword_Attack, Dance_Groove và hàng trăm cái khác. Tài khoản miễn phí nhận các animation miễn phí, còn gói trả phí mở thêm phần còn lại.
Lặp
Idle, đi bộ, chạy, bay và bơi đã lặp sẵn. Add-on ghi thiết lập này vào import settings của file trước khi Godot nhập nó.
Hướng quay mặt
Nhân vật quay mặt về +Z, như mọi model glTF.

Phát animation bằng AnimationPlayer

Nhân vật người chơi đơn giản nhất: một CharacterBody3D có CollisionShape3D (hình capsule), kéo model đã rig vào bên dưới và đổi tên thành Hero. Gắn script này vào 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)

Chạy thử, các phím mũi tên sẽ cho nhân vật chạy bộ quanh màn hình, buông phím thì nhân vật từ từ về idle. Gọi play với animation đang phát thì nó chỉ phát tiếp, nên gọi mỗi khung hình cũng không sao.

Pha trộn bằng AnimationTree

AnimationTree pha trộn các animation theo tốc độ và xử lý các động tác một lần như đòn tấn công. Bạn chỉ cần thiết lập một lần trong editor:

  1. Thêm node AnimationTree vào nhân vật. Trong Inspector, đặt Anim Player là Hero/AnimationPlayer và Tree Root là một AnimationNodeStateMachine mới.
  2. Trong panel AnimationTree ở dưới cùng, nhấp chuột phải và thêm một BlendSpace1D. Đặt tên là Locomotion, mở nó ra và thêm ba điểm: Idle_A ở 0, Walk ở 1.5 và Jog ở 4 (đặt Max Space của nó là 4).
  3. Nhấp chuột phải lần nữa và thêm animation Sword_Attack. Nối Start tới Locomotion, Locomotion tới Sword_Attack, và Sword_Attack quay về Locomotion với Switch Mode đặt là At End và Advance Mode là Auto.
  4. Trong Project > Project Settings > Input Map, thêm action tên attack và gán cho nó một phím.

Sau đó, trong cùng script, bỏ hai dòng anim.play và điều khiển tree thay vào đó:

@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")

Khi AnimationTree đang hoạt động, chính nó phát animation, nên đừng gọi thêm play của AnimationPlayer.

StartLocomotionBlendSpace1D · Idle_A, Walk, Jog↓ travel("Sword_Attack")↑ At EndSword_Attack
Hình vẽ: state machine của một AnimationTree. Locomotion pha trộn Idle_A, Walk và Jog theo tốc độ; travel() chuyển sang Sword_Attack, xong thì quay về.

Cầm kiếm, đổi chế độ lặp

Để đặt một vật vào tay nhân vật, chọn Skeleton3D của nó, thêm BoneAttachment3D bên dưới, đặt Bone Name là hand_r, rồi đặt thanh kiếm dưới attachment đó. Kiếm sẽ theo tay qua mọi animation.

Để đổi animation nào lặp, nhấp đúp vào hero_rigged.glb trong dock FileSystem để mở Advanced Import Settings. Chọn animation dưới AnimationPlayer ở bên trái, đổi Loop Mode, rồi bấm Reimport.

Động vật, sinh vật và đạo cụ

Chọn kiểu cơ thể trong dock trước khi bấm Rig: Fox cho chó, mèo và sói, Horse cho mọi loài có móng guốc, Bird, Dragon, Kaiju cho khủng long, Spider, Insect, Snake, Fish, Kangaroo, Frog, Turtle, Ghost, hoặc Object cho đạo cụ. Mỗi kiểu có bộ xương làm cho cơ thể đó và animation làm riêng cho nó: phi nước đại, vỗ cánh, gầm, bơi, trườn. Chúng phát theo cùng một cách, với cùng AnimationPlayer và AnimationTree. Mọi model rig theo cùng kiểu cơ thể đều có cùng tên xương và tên animation, nên AnimationTree của một con sói dùng được cho mọi con sói. Hướng dẫn về động vật liệt kê animation của từng kiểu.

  • Rồng
  • Bốn chân
  • Có móng guốc
  • Khủng long
  • Nhện
  • Cá
Sáu trong số các kiểu cơ thể khác, được rig trên afk.ai/rig và phát các hoạt ảnh riêng của chúng.

Thế nào thì tính là một lượt rig

Mỗi lần rig đến được AFK AI dùng một lượt rig của tháng này, giống như trên afk.ai/rig và trong các plugin AFK AI khác. Cancel chỉ dừng việc chờ chứ không dừng việc rig, và lượt đó vẫn bị tính. Lần rig thất bại không bị tính. Khi hết lượt rig, dock sẽ báo và hiện See plans, mở các gói của afk.ai.

Câu hỏi thường gặp

Godot có sẵn công cụ rig tự động không?

Không. Godot nhập bộ xương và animation có sẵn, và tính năng retarget của nó chuyển một bộ xương dạng người sang bộ xương khác, nhưng nó không rig mesh. Add-on AFK AI lo phần đó, rồi giao cho Godot một file GLB bình thường.

Có chạy trên Godot 3 không?

Không. Add-on cần Godot 4.2 trở lên. Với Godot 3, hãy rig model trên afk.ai/rig và nhập file GLB tải về.

Có dùng được trong dự án C# không?

Được. Add-on viết bằng GDScript, bản .NET của Godot cũng chạy được, và file GLB đã rig thì như nhau. Trong C#, phát animation bằng GetNode<AnimationPlayer>("Hero/AnimationPlayer").Play("Jog", 0.2);.

Sao lại là GLB mà không phải FBX?

GLB là định dạng Godot nhập tốt nhất: bộ xương, skin weight và mọi animation đều giữ nguyên, trên mọi phiên bản Godot 4. File gốc của bạn có thể là FBX; thứ trả về là GLB.

Add-on có lọt vào game xuất ra không?

Thứ game của bạn dùng là file GLB đã rig. Bản thân add-on chỉ hoạt động trong editor; để bỏ file của nó khỏi bản xuất, thêm addons/afk_ai/* vào phần loại trừ trong tab Resources của export preset.

Có rig nhiều model cùng lúc được không?

Mỗi lần một model, khoảng một phút mỗi model. Để rig cả thư mục bằng script, hãy dùng API rig: nó ghi ra đúng file GLB như vậy.

Có dùng nhân vật đã rig trong game thương mại được không?

Được. Bộ xương và animation là CC0, còn model vẫn là của bạn.

AFK AI có plugin cho Blender, Unity hay Unreal không?

Có. Xem hướng dẫn cho Blender, Unity và Unreal Engine, cùng tổng quan mọi plugin AFK AI cho cả chín ứng dụng.

Rig và tạo hoạt ảnh cho mô hình của bạn

AI rig mô hình ngay trên trình duyệt của bạn, rồi hàng trăm hoạt ảnh phát trên đó. Tải xuống một file GLB cho mọi engine.

Rig mô hình

Hướng dẫn khác