نشرح في هذا المقال كيفية استيراد كائنات ثلاثية الأبعاد موجودة مسبقًا والتي أنشأناها أو نزّلناها من مصدر خارجي إلى داخل محرك ألعاب جودو Godot، ونوضح المزيد حول كيفية استخدام عقد جودو ثلاثية الأبعاد.
استيراد الكائنات ثلاثية الأبعاد
في حال كنا على دراية ببرامج النمذجة ثلاثية الأبعاد مثل بلندر Blender، فيمكن إنشاء نماذجنا الخاصة لاستخدامها في لعبتنا. وفي حال لم نكن كذلك، فهناك العديد من المصادر التي توفر لنا تنزيل الكائنات أو مجموعات الكائنات لأنواع معينة من الألعاب، ومن بينها منصة Kenney.nl التي توفر الكثير من الموارد والملحقات assets المجانية عالية الجودة لصنّاع الألعاب.
سنستخدم في أمثلتنا مجموعة ملحقات Platformer Kit للعبة منصات من Kenney، والتي يمكن تنزيلها من هذا الرابط ، حيث تحتوي مجموعة واسعة من الكائنات ثلاثية الأبعاد 3D. وفيما يلي عينة توضّح هذه الملحقات:
سنجد بعد التنزيل مجلد باسم Models
يتضمن مجموعة متنوعة من الصيغ التي يمكن التعامل معها في محرك ألعاب جودو، ولكن صيغة GLTF مفضلة عن الصيغ الأخرى. سنضع المجلد GLTF format
في مجلد مشروع جودو الخاص بنا ونعيد تسميته إلى platformer_kit.
صيغ الملفات ثلاثية الأبعاد
يجب أن نحفظ نماذجنا ثلاثية الأبعاد بصيغة يمكن لجودو استخدامها سواءً أردنا إنشاء نماذجنا الخاصة أو تنزيلها، حيث يدعم جودو صيغ الملفات التالية، ولكل منها ميزاته وقيوده:
-
GlTF: مدعوم في كل من الإصدارات النصية
.gltf
والثنائية.glb
- DAE Collada: صيغة أقدم لكنها لا تزال مدعومة
- OBJ Wavefront: صيغة أقدم مدعومة، ولكنها محدودة مقارنة بالخيارات الحديثة
- FBX: صيغة تجارية لها دعم محدود
تُعَد صيغة GlTF هي الصيغة الموصى بها كما وضحنا سابقًا، لكونها تحتوي على معظم الميزات ودعمها جيد في جودو.
لنرجع إلى نافذة جودو، يجب أن نرى شريط تقدم أثناء فحص جودو للمجلد platformer_kit واستيراد جميع الكائنات ضمنه.
لننقر نقرًا مزدوجًا على أحد هذه الكائنات ثلاثية الأبعاد وليكن crate.glb
في تبويب نظام الملفات FileSystem والذي يمثل صندوق كالتالي:
خطوات استيراد كائن ثلاثي الأبعاد وتعديل عقدة الجذر
عند النقر على كائن ثلاثي الأبعاد يمكننا رؤية خيار استيراد هذا الكائن كمشهد مع ضبط الخاصية نوع الجذر Root Type على Node3D
وتسميته بالاسم Scene Root. لنعدّل ذلك في قسم الخصائص، ونضبط نوع الجذر على RigidBody3D
ونسميه Crate، ثم ننقر على زر إعادة الاستيراد Reimport.
ننقر بعدها بزر الفأرة الأيمن على crate.glb ونحدّد خيار مشهد موروث جديد New Inherited Scene. أصبح لدينا كائن لعبة كلاسيكي هو الصندوق Crate، وعقدة جذر للمشهد هي RigidBody3D
بالاسم Crate كما أردنا تمامًا لكن سيظهر تحذير يشير بأن هذه العقدة لا تحتوي مكون التصادم Collision الضروري للتفاعل مع الكائنات الأخرى.
لذا فإن الخطوة التالية التي علينا القيام بها هي إضافة شكل تصادم إلى الكائن ثلاثي الأبعاد، ويمكننا تطبيق ذلك من خلال إضافة عقدة CollionShape3D
كما نفعل عادة في الألعاب ثنائية الأبعاد 2D، ولكن بطريقة أسرع.
نحدّد العقدة crate
، وسنرى شريط قوائم يظهر في الجزء العلوي من نافذة العرض، ننقر على أيقونة المجسم ونحدّد إنشاء شكل تصادم Create Collision shape ونحدد قيمة الحقل Collision Shape Placement لتكون Sibling أي أن شكل التصادم سيضاف عقدة أخ للعقدة الحالية وقيمة الحقل Collision Shape Type لتكون Trimmesh أي التصادم سيتم بناءً على الشبكة الثلاثية الأبعاد Mesh للكائن، وعند الضغط على زر الإنشاء سيضيف جودو تلقائيًا العقدة CollionShape3D
مع شكل تصادم يطابق الشبكة.
انتهينا الآن من إعداد كائن الصندوق Crate
، لنحفظ المشهد الخاص بنا ونتعرّف كيف يمكننا استخدامه في اللعبة أو المشروع.
بناء مشهد ثلاثي الأبعاد
ننشئ الآن مشهدًا جديدًا باستخدام عقدة الجذر Node3D
، وأول ابن سنضيفه هو أرضية لوضع بعض الصناديق عليها، لذا نضيف عقدة StaticBody3D
بالاسم Ground، ونضيف إليها العقدة MeshInstance3D
. ونحدّد خيار BoxMesh جديدة في الخاصية Mesh لها، ثم نضبط الحجم أو الأبعاد الخاصة بها Size على القيم التالية (10,0.1,10)
بحيث يكون لدينا أرضية كبيرة، وسيبدو شكلها أفضل إن لم تكن باللون الأبيض.
توجد أيضًا خاصية المادة Material في خاصيات الشبكة Mesh، فالمواد تساعدنا على تحديد بها مظهر الكائن. لنحدّد الخيار StandardMaterial3D جديدة كقيمة لهذه الخاصية، ثم ننقر عليها لفتح قائمة كبيرة من الخاصيات، حيث نحتاج إلى خاصية الإضاءة Albedo و اللون Color لضبط لون الشبكة، سنختار لونًا مثل اللون البني أو الأخضر الداكن.
الآن إذا أضفنا صندوقًا، فسيسقط عبر الشبكة، لذا يجب أيضًا إعطاؤه شكل تصادم، لذا نضيف عقدة التصادم CollisionShape3D
إلى الأرضية Ground
ونحدد الخيار BoxShape3 جديدة ، ثم نضبط حجم صندوق التصادم Size ليكون بحجم الشبكة.
عند إضافة صندوق إلى المشهد، سيسقط تلقائياً عبر الأرضية Ground نظراً لغياب خصائص التصادم الفيزيائي. لحل هذه المشكلة، نحتاج إلى إضافة عقدة CollisionShape3D
كعقدة فرعي للأرضية Ground. بمجرد إضافة العقدة، علينا تعيين خاصية Shape لها باختيار BoxShape3D جديدة ، ثم نضبط أبعاد صندوق التصادم ليتطابق مع حجم الشبكة. بهذه الطريقة، ستصبح الأرضية قادرة على منع الأجسام من السقوط عبرها.
ننشئ الآن عددًا من الصناديق في المشهد ونرتبها في كومة تقريبية. ونضيف كاميرا Camera
ونضعها حيث يكون لديها رؤية جيدة للصناديق، ونشغّل المشهد ونشاهد الصناديق تتدحرج.
نلاحظ أن المشهد مظلم جدًا بسبب عدم وجود ضوء فيه، إذ لا يضيف جودو افتراضيًا أي إضاءة أو بيئة إلى المشاهد كما يفعل في نافذة عرض المحرّر، ويُعَد ذلك مناسبًا عندما نريد إعداد الإضاءة الخاصة بنا، ولكن يوجد طريقة مختصرة لنضيء مشهدنا البسيط كما سنوضح في القسم التالي.
الإضاءة
تتوفر عقد إضاءة متعددة في المشاهد ثلاثية الأبعاد يمكننا استخدامها لإنشاء مجموعة متنوعة من تأثيرات الإضاءة. سنبدأ بالعقدة DirectionalLight3D
أولًا، ولكن سنجعل جودو يستخدم العقدة نفسها التي يستخدمها في نافذة المحرر بدلًا من إضافتها يدويًا. نلاحظ وجود أيقونتين في الجزء العلوي فوق نافذة العرض يتحكمان في إضاءة المعاينة Preview Lighting وبيئة المعاينة Preview Environment. إذا نقرنا على النقاط الثلاث بجوارهما، فيمكنك رؤية إعداداتهما.
ننقر على زر إضافة الشمس إلى المشهد Add Sun to Scene، وبهذا سيضيف جودو العقدة DirectionalLight3D
إلى المشهد مباشرة. ننقر على زر إضافة بيئة إلى المشهد Add Environment to Scene، وسيفعل جودو الشيء نفسه مع معاينة السماء من خلال إضافة عقدة WorldEnvironment
. نشغّل المشهد مرة أخرى، وسنتمكن من رؤية الصناديق تتساقط بشكل أفضل.
تدوير الكاميرا
لنجعل الآن الكاميرا تدور ببطء حول المشهد، لذا نحدّد العقدة الجذر ونضيف عقدة Node3D
، والتي ستكون موجودة عند النقطة (0,0,0)
ونطلق على هذه العقدة اسم CameraHub. نسحب الكاميرا في شجرة المشهد لجعلها ابنًا لهذه العقدة الجديدة، حيث إذا دارت عقدة CameraHub
حول المحور y، فسنسحب الكاميرا معها.
نضيف سكربتًا إلى العقدة الجذر ونضع فيه ما يلي:
extends Node3D func _process(delta): $CameraHub.rotate_y(0.6 * delta)
يعمل السكربت أعلاه على تدوير العقدة CameraHub
حول المحور Y بشكل مستمر أثناء اللعبة. وتعتمد سرعة التدوير على الزمن بين الإطارات delta، ما يجعل الحركة أكثر سلاسة وعملية بغض النظر عن أداء الجهاز. لنشغّل الآن المشهد لرؤية ما سيحدث.
الخلاصة
تعلّمنا في هذا المقال كيفية استيراد كائنات ثلاثية الأبعاد من مصادر خارجية وكيفية دمجها في مشهد بسيط في جودو، وتعرفنا أيضًا على الإضاءة والكاميرات المتحركة، وسنوضح في المقال التالي كيفية بناء مشهد أكثر تعقيدًا وتضمين شخصية يتحكم فيها اللاعب.
ترجمة -وبتصرّف- للقسم Importing 3D Objects من توثيقات Kidscancode.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.