الأدلةشرح عملي6 دقيقة للقراءة
جهّز شخصية ثلاثية الأبعاد للتحريك وحرّكها في Godot 4: إضافة 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 بارع في تشغيل الحركات، لكنه لا يملك أي طريقة لإنشاء 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. ولا يُرسَل إلا ملف النموذج الذي تختاره.
ثبّت الإضافة
- نزّل الإضافة من صفحة إضافة Godot.
- انسخ مجلدها
addons/afk_aiإلى مجلدaddonsفي مشروعك. وأنشئ مجلدaddonsإن لم يكن في مشروعك. - افتح Project > Project Settings > Plugins وحدّد Enable بجوار AFK AI.
تظهر لوحة AFK AI على اليمين، بجوار Inspector.
جهّز نموذجًا للتحريك
- سجّل الدخول. انقر Sign in في لوحة AFK AI. سيفتح متصفحك afk.ai؛ سجّل الدخول هناك باستخدام Google. تعرض اللوحة بريدك الإلكتروني وعدد عمليات إعداد الـrig المتبقية لك هذا الشهر. وإذا تعذّر على المتصفح العودة إلى Godot، فإنه يعرض رمز تسجيل دخول بدلًا من ذلك: الصقه تحت I have a sign-in code وانقر Use.
- اختر النموذج. في لوحة FileSystem، انقر ملف النموذج.
- اختر الخيارات. Body type: Human للبشر وكل ما يمشي على ساقين، أو نوع الحيوان أو المخلوق. Animations: All animations، أو Rig only للهيكل العظمي وحده. Facing: اتركه على Auto.
- انقر 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 بين الحركات بحسب السرعة، وتتولى الحركات التي تُؤدّى مرة واحدة مثل الهجوم. اضبطها مرة واحدة في المحرّر:
- أضف node من نوع 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، أضف 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 أيضًا.
أمسك سيفًا، وغيّر التكرار
لتضع شيئًا في يد الشخصية، حدّد 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 الخاصة بذئب واحد لكل الذئاب. ويسرد دليل الحيوانات حركات كل نوع.
- تنين
- رباعي الأرجل
- ذو حوافر
- ديناصور
- عنكبوت
- سمكة
ما الذي يُحتسب عملية إعداد 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 واحدًا لأي محرك.
المزيد من الأدلة
شرح عملي
جهّز شخصية للتحريك تلقائيًا في Blender: إضافة AFK AI المجانية
حدّد نموذجك، وانقر Rig، وبعد دقيقة تقريبًا تقف بجواره نسخة مجهّزة للتحريك مع حركاتها، في Blender 4.2 أو أحدث.
شرح عملي
جهّز شخصية للتحريك تلقائيًا في Unreal Engine 5: من static mesh إلى skeletal mesh متحرك
انقر بزر الفأرة الأيمن على شبكة، واختر Rig with AFK AI، وبعد دقيقة يكون في المجلد نفسه skeletal mesh مع هيكله العظمي والـphysics asset وحركاته.
شرح عملي
جهّز أي نموذج ثلاثي الأبعاد للتحريك تلقائيًا داخل Unity: جاهز بإعداد Humanoid ومعه مقاطع حركته
اختر نموذجًا في نافذة Project وانقر Rig. وبعد دقيقة يكون بجواره ملف FBX مجهّز للتحريك، مضبوط بإعداد Humanoid، وكل حركة فيه مقطع مستقل.