محرك الألعاب غودو godot، هو مُحرك العاب جديد نسبيا، ظهر في 2016 وبدء انتشاره في 2018، وحاليا بدء ينتشر اكثر بين مطوري الألعاب. وبالنسبة للمطور الجديد، فيمكنه رؤية سلسة تعليمية له، ولكن ماذا عن من كان لديه خبرة من قبل في تطوير الألعاب بمحركات اخرى؟
كل مُحرك العاب له فلسفته الخاصة ومفاهيمه واسلوبه في بناء/صناعة الالعاب، منها ما يعتمد كثيرا على البرمجة ومنها الذي لا يطلب منك أن تبرمج على الاطلاق! ولكن ايا ما يكن، ستجد بعد المفاهيم الاساسية المتواجدة في كل جزء في المحرك
وتعد معرفة بنية المحرك عنصرًا أساسيًا في رحلة أي مطوّر يريد الانتقال له، وخاصةً للمطورين المستقلين الذين يعتمدون على أدوات قوية وداعمة لتطوير مشاريعهم الخاصة.
فمُعرفة فلسفته في التصميم مثلا ستُمكنك من فهم كيفية عمل هذا المحرك بشكل فعال، مما يُساعدك في استخدام ميزاته المتقدّمة وتحقيق أقصى استفادة من أدواته.
الجيد في الامر، انه يعتمد على أسلوب مُبسّط ومرن، يركّز على سهولة الاستخدام والبرمجة الشيئية(OOP).
في هذا المقال ساتحدث عن أهم النظم الخاصة به، والتي من شأنها تسهيل الانتقال إلى محرك Godot في حال كنت مطور العاب يستخدم مُحرك آخر كيونتي – unity
عناصر المقال
فلسفة Godot: بساطة تفتح أبواب الإبداع
يتميز Godot بفلسفة واضحة تتمحور حول البساطة والكفاءة. فمن خلال واجهة المستخدم سهلة الفهم والمباشرة، ستسهل عملية تعلمه واستخدامه، مما يجعله مثالية للمطورين المستقلين الذين يسعون لصناعة ألعاب دون الحاجة إلى التعامل مع تعقيدات البرمجة المعقدة.
يتّسم المحرك بمرونة واسعة في التخصيص، مما يمنحك الحرية في تشكيل أدواته وفق احتياجاتك. كما انه يسمح لك اختيار اللغات البرمجية التي تُناسبك بين لغتي سي شارب C# ولغة GDscript المشابهة كثيرا للغة بايثون.
وفي نفس الوقت فأن إنشاء الألعاب فيه يكون عبر نظام “كل شيء هو عقدة” (Everything is a Node) الذي يوفر لك مرونة كبيرة في بناء اللعبة. فكما هي عادة اي محرك، يُنظر إلى كل عناصر اللعبة على اساس انها كائنات، وفي محرك غودو، فتلك تسمى عٌقد.
فكر في كل عنصر من عناصر لعبتك – من الكاميرات و الشخصيات إلى العناصر القابلة للتفاعل و المؤثرات – كعقد مستقل له خواصه وتفاعلاته.
يُمكنك من خلال هذه الفلسفة من إنشاء هياكل متكاملة و قابلة للتوسع بسهولة بدون تعقيدات غير ضرورية، مما يجعل Godot مثالية للألعاب الصغيرة و الكبيرة على حد سواء.
نظام العقد (Nodes)
تُشكل العقد (Nodes) حجر الأساس في بنية Godot، فهي الوحدات الأساسية التي تُبنى منها كل عنصر في لعبتك، من الشخصيات إلى الكائنات إلى واجهة المستخدم. تُعرف كل عقدة بدور محدد مسبقاً، وتُمكنك من إضافة سلوكيات وتأثيرات بسهولة.
ويمكن تقسيم عُقد المحرك إلى 3 أنواع حيث يقدم المحرك مجموعة واسعة من العقد في كل نوع. والانواع هي:
- Node3D: وهي عقد خاصة بللأجسام ثلاثية الأبعاد، تُستخدم لتمثيل الشخصيات، الكائنات، والبيئة.
- Canvas: تُستخدم لإنشاء العناصر المرئية ثنائية الأبعاد وتنقسم إلى نوعين
- Node2D : وهي كائنات اللعبة ثنائية الابعاد مثل sprite والخلفيات والاجسام الفيزيائية
- Control: تُمثل عنصر واجهة مستخدم محدد، مثل حقل نصّي، زرّ، أو قائمة مُنسدلة.
- Scene: تُمثل العقدة الأساسية لكل مشهد في لعبتك، وهي تُشكل نقطة البداية لترتيب العناصر. وأيضا تمثل كل العقد الاخرى التي لا يصح وجودها في بقية الانواع كعقد الاصوات والمؤقتات
الهيكل الشجري: تترابط العقد معاً في هيكل شجري يُشكل نظام هرمي واضح. تُشكل العقدة الأب (Parent Node) نقطة مرجعية للعقد التابعة لها (Child Nodes)، وتستطيع التحكم بها وتأثيرها. وتلك تسمى شجرة المشهد.
الربط بين العقد: يتيح لك Godot ربط العقد معاً من خلال “العلاقات الابوية” (Parenting)، حيث تُصبح العقد التابعة تابعة للعقد الأم، وتُورث خصائصها ووظائفها.
مثال عملي: لنفترض أنك ترغب في إنشاء لعبة بسيطة تتضمن شخصية تُمشي في عالم ثلاثي الأبعاد. يمكنك البدء بعقدة Node أساسية، ثم إنشاء عقدة CharacterBody3D لتكون الشخصية. ومع العقدة الاساسية يوجد ايضا عقد الاضاءة وبناء العالم GridMap
داخل عقدة الشخصية، تضيف عقدة المُجسم والتي تُظهر النموذج ثلاثي الابعاد خاصتك وايضا عقدة التفاعل مع الفيزياء. وأي شيئ يحدث لعقدة الشخصية، ستتاثر به تلك العقد ايضا لانها مجرد ابناء له
نظام الموارد (Resources)
نظام الموارد يشكل عنصرًا أساسيًا في إدارة أصول لعبتك. تُمثل الموارد ملفات البيانات التي تَستخدمها لعبتك في عرض الرسومات، تشغيل الأصوات، تنفيذ التعليمات البرمجية، وتنفيذ مهام أخرى.
يمكن تصنيف الموارد إلى العديد والعديد من الأنواع مختلفة، منها التي تتعامل مع الملفات النصية ومنها مع ملفات الصور ومنها مع ملفات الاصوات والنماذج ثلاثية الابعاد والخطوط. وأيضا تلك الملفات التي يوفرها المحرك كلمفات المشاهد والشيدر.
وفي لوحة الخصائص- inspector، ستجد خصائص العقد، حيث بعضها قد يطلب منك استخدام احد الموارد، ويمكنك اضافة خصائصك مع تحديد نوع الموارد المطلوبة فيها.
كما يقدم لك هذا الاسلوب العديد من الفوائد، ومنها :
- تنظيم أفضل لأصول اللعبة: تُساعدك الموارد على تنظيم أصول لعبتك بطريقة واضحة وفعالة، مما يُسهل عليك الوصول إليها وإدارتها.
- إعادة الاستخدام: تستطيع استخدام نفس الموارد في أماكن مختلفة من لعبتك، مما يُقلل من حجم اللعبة ويسهل عملية التطوير.
- سهولة التحميل والإدارة: يُتيح لك هذا النظام تحميل-Load وإدارة الموارد بسهولة، دون الحاجة إلى كتابة أكواد معقدة. فيكفي استخدام مسارها لاستعمالها.
مثال عملي لإدارة الموارد: لنفترض أنك تريد استخدام صورة خلفية في لعبتك. يمكنك استخدام عقدة تحمل مورد الصور بعدها، ستُحدد مسار الصورة في جهازك، ثم تُضيفها إلى مشروعك. عندها، هكذا تصل إلى صورة الخلفية هذه من أي جزء من مشروعك عن طريق تحديدها باستخدام اسمها.
او يمكنك انشاء عدو وحفظه كمورد جديد! وهكذا يسهل عليك وضعه في المشاهد والمراحل الجديدة. وبمناسبة المشاهد، دعني انتقل إليه الان.
نظام المشاهد (Scenes)
في غودو تُشكل المشهد(Scene) اللبنة الأساسية لبناء اللعبة، فهي تمثل مجموعة منظمة من العقد (Nodes) والـموارد (Resources) التي تُشكل جزءًا محددًا من عالم اللعبة.
تخيل المشهد كغرفة في منزلك، تحتوي على أثاث (العقد) ذو مظهر (الموارد) مُرتبة بطريقة معينة.
فكر في لعبة تعتمد على استكشاف عالمٍ مفتوح. يمكنك أن تُقسم هذا العالم إلى مشاهد (Scenes) مختلفة: مدينة، غابة، قلعة، وغيرها. كل مشهد سيكون مُستقلًا عن الآخر، ويتضمن العقد الخاصة به، مثل شخصيات (Characters) واعداء (Enemies) ومعالم (Objects).
وتستطيع إنشاء مشاهد جديدة بسهولة وترتيب العقد و الموارد داخلها كما تشاء. كما تستطيع استخدام أنواع مختلفة من المشاهد، إما ثنائية الأبعاد (2D) أو ثلاثية الأبعاد (3D)، اعتمادًا على نوع اللعبة التي تطورها.
تُعتبر العلاقة بين المشهد و العقد والموارد مُترابطة بشكل كبير. العقد تُستخدم لبناء عناصر المشهد، و الموارد تُستخدم لتزيينها وإعطائها مظهرًا محددًا.
على سبيل المثال، يمكنك استخدام عقد شخصية لرسم شخصية داخل مشهد، ثم استخدام الموارد لإضافة صورة وإعطاءها صوتًا محددًا، ثم حفظ كل ذلك في مشهد.
ويمكنك دمج المشاهد معًا في اللعبة عن طريق إجراء تغيير من مشهد إلى آخر عن طريق استخدام العقد المناسبة و كتابة بعض تعليمات GDScript بسيطة.
نظام الأشارات (signals)
نظام الاشارات هو نظام الاحداث (events) في المُحركات الاخرى، حيث توصل “حدث” ما بدالة موجودة في أحد الشيفرات (scripts). فمثلا، تستطيع ربط حدث الضغط في عقدة الزر، مع دالة للانتقال إلى مرحلة جديدة، أو ربط حدث “دخول ساحة” مع ظهور أحد الاعداء.
تحدثت بالفعل عن نظام الاشارات بتفصيل أكبر في مقال سابق، للمزيد من التفاصيل، يمكنك الرجوع إليه عبر الرابط التالي:
هل تود تجربة المحرك؟
تلك كانت هي فلسفة محرك Godot، في هذا المقال تحدثت عن بنيته الداخلية الفريدة وفلسفته في تصميم الألعاب.
فيه وضحت نظام العقد الذي يوفر مرونة هائلة في تصميم الألعاب، وأظهار مفهوم الموارد وطريقة تنظيمها في المشروع، ثم نظام المشاهد وكيفية تحويلها إلى واقع افتراضي مع لمحة يسيرة عن الإشارات وعلاقتها بالاحداث.
لا تخف من تجربة المحرك بنفسك، فالمجتمع رحب وودود، وسيوفر لك الدعم الذي تحتاجه في رحلتك.
تذكر أن الألعاب تتطلب الصبر والمثابرة، وإن كنت مُطوّرًا مستقلًا، فركز على صقل مهاراتك في تصميم اللعبة، وأطلق العنان لخيالك في بناء عالمك الافتراضي.
ستجد في Godot الأدوات والمرونة لتحقيق رؤيتك، وتقديم تجارب ممتعة للاعبين في جميع أنحاء العالم.
يمكنك زيارة موقع محرك غودو عبر الرابط التالي : https://godotengine.org