الأدلةشرح عملي6 دقيقة للقراءة

جهّز شخصية ثلاثية الأبعاد للتحريك وحرّكها في Godot 4: إضافة 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 بارع في تشغيل الحركات، لكنه لا يملك أي طريقة لإنشاء rig. لذا تقطع الشخصية عادةً رحلة ذهاب وعودة: تصدّرها، وتجهّزها في Blender (أو في Mixamo، للشخصيات الشبيهة بالبشر فقط)، وتبحث عن حركات، وتصدّر ملف GLB، ثم تضبط كل حركة متكررة على التكرار من جديد بعد الاستيراد.

أما إضافة AFK AI فتقطع هذه الرحلة من لوحة داخل محرّر Godot. انقر نموذجك في لوحة FileSystem، ثم Rig. وبعد دقيقة تقريبًا يُحفظ hero_rigged.glb بجوار hero.glb، بهيكل عظمي مصمّم لجسمه، وأوزان تأثير العظام، وحركاته في AnimationPlayer. وحركات الوقوف والمشي والجري مضبوطة على التكرار مسبقًا.

ما تحتاج إليه

Godot
الإصدار 4.2 أو أحدث، النسخة القياسية أو نسخة .NET.
نموذجك
ملف .glb أو .gltf أو .fbx في مشروعك، حتى 50 MB. ويجب أن يضم ملف .gltf كل شيء في الملف الواحد؛ فإذا كان بجواره ملف .bin، فصدّر ملف .glb بدلًا منه.
حساب على afk.ai
مجاني، عبر Google. وكل عملية إعداد rig تُخصم من حصة حسابك الشهرية، كما على afk.ai/rig.
الإنترنت
يجري إعداد الـrig على خوادم afk.ai. ولا يُرسَل إلا ملف النموذج الذي تختاره.

ثبّت الإضافة

  1. نزّل الإضافة من صفحة إضافة Godot.
  2. انسخ مجلدها addons/afk_ai إلى مجلد addons في مشروعك. وأنشئ مجلد addons إن لم يكن في مشروعك.
  3. افتح Project > Project Settings > Plugins وحدّد Enable بجوار AFK AI.

تظهر لوحة AFK AI على اليمين، بجوار Inspector.

جهّز نموذجًا للتحريك

  1. سجّل الدخول. انقر Sign in في لوحة AFK AI. سيفتح متصفحك afk.ai؛ سجّل الدخول هناك باستخدام Google. تعرض اللوحة بريدك الإلكتروني وعدد عمليات إعداد الـrig المتبقية لك هذا الشهر. وإذا تعذّر على المتصفح العودة إلى Godot، فإنه يعرض رمز تسجيل دخول بدلًا من ذلك: الصقه تحت I have a sign-in code وانقر Use.
  2. اختر النموذج. في لوحة FileSystem، انقر ملف النموذج.
  3. اختر الخيارات. Body type: Human للبشر وكل ما يمشي على ساقين، أو نوع الحيوان أو المخلوق. Animations: All animations، أو Rig only للهيكل العظمي وحده. Facing: اتركه على Auto.
  4. انقر Rig. تعرض اللوحة ما يجري: الرفع، والانتظار، وإعداد الـrig، والتنزيل. وواصل عملك في أثناء ذلك.

وعند الانتهاء، يُحفظ hero_rigged.glb بجوار hero.glb، ويُستورد ويُحدَّد. ولا يُمسّ الأصلي. وإذا جهّزت النموذج نفسه مرة أخرى فستحصل على hero_rigged_2.glb، فلا يُستبدل أي شيء.

ما في ملف GLB المجهّز

اسحب hero_rigged.glb إلى مشهد لاستخدامه: يدخل بوصفه node واحدًا وكل شيء تحته.

Skeleton3D
هيكل عظمي مصمّم لنوع الجسم، وشبكتك مربوطة به (skinned). يحصل الإنسان على 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. أضف node من نوع 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، أضف action اسمه 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 نشطة، فهي التي تشغّل الحركات، لذا لا تستدعِ play من AnimationPlayer أيضًا.

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، وضع السيف تحت هذا المرفق. فيتبع اليد في كل حركة.

ولتغيير الحركات التي تتكرر، انقر نقرًا مزدوجًا على hero_rigged.glb في لوحة FileSystem لفتح 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 وتؤدي حركاتها الخاصة.

ما الذي يُحتسب عملية إعداد rig

كل عملية تصل إلى AFK AI تُخصم من عمليات هذا الشهر، كما على afk.ai/rig وفي إضافات AFK AI الأخرى. يوقف Cancel الانتظار، لا إعداد الـrig، الذي يظل محتسبًا. ولا تُحتسب العملية التي تفشل. وعند نفاد عملياتك، تخبرك اللوحة بذلك وتعرض See plans، الذي يفتح باقات afk.ai.

الأسئلة الشائعة

هل في Godot أداة مدمجة لإعداد الـrig تلقائيًا؟

لا. يستورد Godot الهياكل العظمية والحركات الموجودة بالفعل، ويطابق نقل الحركات (retargeting) فيه هيكلًا شبيهًا بالبشر مع آخر، لكنه لا يجهّز شبكة. وإضافة AFK AI تتولى هذا الجزء، وتسلّم Godot ملف GLB عاديًا.

هل تعمل في Godot 3؟

لا. تحتاج إلى Godot 4.2 أو أحدث. ومع Godot 3، جهّز النموذج على afk.ai/rig واستورد ملف GLB الذي تنزّله.

هل يمكنني استخدامها في مشروع C#؟

نعم. الإضافة مكتوبة بـ GDScript، الذي تشغّله نسخة .NET من Godot أيضًا، وملف GLB المجهّز هو نفسه في الحالتين. وفي C#، شغّل حركة بـ GetNode<AnimationPlayer>("Hero/AnimationPlayer").Play("Jog", 0.2);.

لماذا GLB وليس FBX؟

GLB هي الصيغة التي يستوردها Godot على أفضل وجه: يصل الهيكل العظمي وأوزان تأثير العظام وكل حركة كما هي، في كل إصدار من Godot 4. ويمكن أن يكون نموذجك الأصلي بصيغة FBX؛ أما ما يعود فهو GLB.

هل تنتهي الإضافة في لعبتي المصدَّرة؟

ما تستخدمه لعبتك هو ملف GLB المجهّز. أما الإضافة نفسها فلا تعمل إلا في المحرّر؛ ولاستبعاد ملفاتها من التصدير، استثنِ addons/afk_ai/* في تبويب Resources في إعداد التصدير المسبق (export preset).

هل يمكنني تجهيز عدة نماذج دفعة واحدة؟

واحدًا تلو الآخر، نحو دقيقة لكل منها. ولتجهيز مجلد كامل من سكربت، استخدم API إعداد الـrig: فهو يكتب ملف GLB نفسه.

هل يمكنني استخدام الشخصيات المجهّزة في لعبة تجارية؟

نعم. الهياكل العظمية والحركات بترخيص CC0، ونموذجك يبقى ملكك.

هل توجد إضافة AFK AI لـ Blender أو Unity أو Unreal أيضًا؟

نعم. راجع أدلة Blender و Unity و Unreal Engine، والعرض الشامل لكل إضافات AFK AI للتطبيقات التسعة كلها.

اعمل ريغ لنموذجك وحرّكه

يعمل له الذكاء الاصطناعي الريغ في متصفحك، ثم تعمل عليه مئات الحركات. نزّل ملف GLB واحدًا لأي محرك.

اعمل ريغ لنموذج

المزيد من الأدلة