نظام مكونات الكيان

نظام الكيانات والمكونات ( ECS ) هو نمط معماري برمجي . يتكون هذا النظام من كيانات تتألف من مكونات بيانات، بالإضافة إلى أنظمة تعمل على هذه المكونات. ويرتبط هذا النظام بشكل خاص بتطوير ألعاب الفيديو لتمثيل عناصر عالم اللعبة.
يُعطي نظام ECS الأولوية للتكوين على حساب الوراثة . لا يُعرَّف كل كيان بتسلسل هرمي للأنواع، بل بالمكونات المرتبطة به. تعمل الأنظمة بشكل شامل على جميع الكيانات التي تحتوي على المكونات المطلوبة. على سبيل المثال، قد يقوم نظام غذائي بتكرار العملية على كل كيان يحتوي على مكون ذي صلة لتتبع الجوع، ويتخذ إجراءً عليه لدفعه قليلاً بعيدًا عن الشبع على فترات زمنية محددة. أما الكيانات التي تفتقر إلى المكون، مثل التضاريس أو العناصر، فسيتم تجاهلها بشكل طبيعي من قِبل النظام الغذائي.
نظراً لوجود غموض في اللغة الإنجليزية، يُفسَّر اسم ECS بأنه نظام يتألف من كيانات ومكونات. في محاضرة ألقاها سكوت بيلاس في مؤتمر مطوري الألعاب (GDC) عام ٢٠٠٢، [ ١ ] [ ٢ ] قارن بين نظام كائنات مكتوب بلغة C++ ونظام مكوناته المخصص الجديد. يتوافق هذا مع الاستخدام التقليدي لمصطلحات النظام في هندسة الأنظمة العامة، مع استخدام نظام كائنات Common Lisp ونظام الأنواع كمثالين.
على الرغم من أن نظام التحكم الإلكتروني (ECS) يُستخدم في الغالب في تطوير ألعاب الفيديو ، إلا أنه يمكن أن يكون مفيدًا في مجالات أخرى، [ 3 ] مثل محاكيات الروبوتات مثل Gazebo. [ 4 ]
صفات
يجمع نظام المكونات والأنظمة (ECS) بين أفكار راسخة ومتكاملة في علوم الحاسوب العامة ونظرية لغات البرمجة . فعلى سبيل المثال، يمكن اعتبار المكونات نمطًا برمجيًا شائعًا في لغات البرمجة المختلفة . وتُعدّ المكونات حالة خاصة ضمن منهجية التفويض العامة وبروتوكول الكائنات الوصفية . أي أنه يمكن التعبير عن أي نظام مكونات وكائنات متكامل باستخدام القوالب ونموذج التعاطف ضمن رؤية معاهدة أورلاندو [ 5 ] للبرمجة كائنية التوجه .
- كيان
- يمثل الكيان كائنًا عامًا. في سياق محرك الألعاب، على سبيل المثال، يُمثَّل كل كائن لعبة عام بكيان. عادةً ما يتكون من مُعرِّف فريد فقط. تستخدم التطبيقات عادةً عددًا صحيحًا عاديًا لهذا الغرض. [ 6 ]
- عنصر
- يُعرّف المكوّن كيانًا ما بأنه يمتلك جانبًا معينًا، ويحتوي على البيانات اللازمة لنمذجة هذا الجانب. على سبيل المثال، قد يكون لكل كائن لعبة قابل للضرر مكوّن صحة مرتبط به. تستخدم التطبيقات عادةً الهياكل أو الفئات أو المصفوفات الترابطية . [ 6 ]
- نظام
- النظام هو عملية تؤثر على جميع الكيانات ذات المكونات المطلوبة. على سبيل المثال، قد يستعلم نظام فيزيائي عن الكيانات التي لها مكونات الكتلة والسرعة والموقع، ويكرر العملية على النتائج، ويجري حسابات فيزيائية لكل كيان باستخدام مجموعة المكونات.
يمكن تغيير سلوك الكيان أثناء التشغيل بواسطة الأنظمة التي تضيف أو تحذف أو تعدل المكونات. هذا يزيل مشاكل الغموض المتعلقة بتسلسلات التوريث العميقة والواسعة التي غالبًا ما توجد في تقنيات البرمجة كائنية التوجه، والتي يصعب فهمها وصيانتها وتوسيعها. تتوافق مناهج ECS الشائعة بشكل كبير مع تقنيات التصميم الموجهة نحو البيانات ، وغالبًا ما تُدمج معها . تُخزن بيانات جميع مثيلات المكون بشكل متجاور في الذاكرة الفعلية، مما يتيح الوصول الفعال إلى الذاكرة للأنظمة التي تعمل على العديد من الكيانات.
تاريخ
في عام 1963، قام إيفان ساذرلاند بتخزين العناصر المرئية للرسم باستخدام شكل مبكر من نظام الإحداثيات (ECS). فبدلاً من تغليف النقاط في كائنات مختلفة (مثل الخطوط والدوائر والمستطيلات)، تم تخزين النقاط في مخزن مؤقت حلقي ، وكانت العناصر المرئية تشير إليها فقط. عند تحريك نقطة، سمح ذلك بتحديث جميع الأشكال والقيود التي تستخدمها. [ 7 ]
في عام 1998، كانت لعبة Thief: The Dark Project رائدة في مجال ECS. [ 8 ] تم استخدام المحرك لاحقًا في الجزء الثاني منها، وكذلك في System Shock 2 .
في عام 2002، ألقى سكوت بيلاس من شركة Gas Powered Games ( Dungeon Siege ) محاضرة رائدة حول ECS. [ 1 ] وقد ألهمت هذه المحاضرة العديد من التطبيقات المعروفة اللاحقة.
في أوائل يناير 2007، شارك ميك ويست، الذي عمل على سلسلة ألعاب توني هوك، تجاربه حول عملية اعتماد نظام ECS في شركة نيفرسوفت. [ 9 ]
في عام 2007 أيضًا، قام الفريق العامل على لعبة Operation Flashpoint: Dragon Rising بتجربة تصميمات ECS، بما في ذلك تلك المستوحاة من Bilas/ Dungeon Siege ، وكتب آدم مارتن لاحقًا شرحًا مفصلًا لتصميم ECS، [ 10 ] متضمنًا تعريفات للمصطلحات والمفاهيم الأساسية. [ 11 ] وعلى وجه الخصوص، ساهم عمل مارتن في نشر أفكار الأنظمة كعنصر أساسي، والكيانات كمعرفات، والمكونات كبيانات أولية، وتخزين الشفرة في الأنظمة، وليس في المكونات أو الكيانات.
في عام 2015، قدمت شركة Apple Inc. إطار عمل GameplayKit ، وهو إطار عمل API لتطوير الألعاب لأنظمة iOS و macOS و tvOS والذي يتضمن تطبيقًا لـ ECS. [ 12 ]
في أكتوبر 2018 [ 13 ]، أصدرت شركة Unity عرضها التجريبي للمدينة الضخمة الذي استخدم بنية تقنية مبنية على نظام ECS. يعمل نظام ECS الخاص بشركة Unity على بنية محسّنة قوية تُعرف باسم DOTS، والتي "تمكّن المطورين من توسيع نطاق المعالجة بطريقة عالية الأداء".
الاختلافات
يمكن أن يختلف تخطيط البيانات لأنظمة ECS المختلفة وكذلك تعريف المكونات، وكيفية ارتباطها بالكيانات، وكيفية وصول الأنظمة إلى مكونات الكيانات.
نظام مارتن للهندسة الكهربائية
يُعرّف آدم مارتن في سلسلة مدوناته ما يعتبره نظامًا مكونًا من كيان. [ 11 ]
لا يتكون الكيان إلا من مُعرّف للوصول إلى مكوناته. ومن الممارسات الشائعة استخدام مُعرّف فريد لكل كيان. هذا ليس شرطًا، ولكنه يحمل العديد من المزايا:
- يمكن الإشارة إلى الكيان باستخدام المعرّف بدلاً من المؤشر . وهذا أكثر موثوقية، إذ يسمح بحذف الكيان دون ترك مؤشرات معلقة.
- كما أنه يساعد في حفظ الحالة خارجيًا، فعند إعادة تحميل الحالة، لا حاجة لإعادة بناء المؤشرات.
- يمكن إعادة ترتيب البيانات في الذاكرة حسب الحاجة، طالما تم تعديل المؤشرات وفقًا لذلك.
- يمكن استخدام معرّفات الكيانات عند التواصل عبر الشبكة لتحديد الكيان بشكل فريد.
يمكن تحقيق بعض هذه المزايا أيضاً باستخدام المؤشرات الذكية .
لا تحتوي المكونات على أي شيفرة برمجية ( سلوك ) خاصة باللعبة. ليس من الضروري أن تكون المكونات موجودة فعليًا مع الكيان، ولكن يجب أن يسهل العثور عليها والوصول إليها باستخدام الكيان.
"يعمل كل نظام بشكل مستمر (كما لو كان لكل نظام خيط خاص به) وينفذ إجراءات عالمية على كل كيان يمتلك مكونًا أو مكونات تتطابق مع استعلام ذلك النظام."
محرك الألعاب Unity
تعتمد بنية Unity على الجداول، ويحتوي كل جدول على أعمدة من المكونات. في هذا النظام، يُحدد نوع الكيان بناءً على المكونات التي يحتويها. لكل نوع كيان ، يوجد جدول (يُسمى النموذج الأولي ) يحتوي على أعمدة من المكونات التي تُطابق المكونات المستخدمة في الكيان. للوصول إلى كيان معين، يجب العثور على النموذج الأولي (الجدول) الصحيح، ثم فهرسة كل عمود للحصول على كل مكون مُناسب لذلك الكيان.
الأنماط الشائعة في استخدام نظام ECS
الطريقة المعتادة لنقل البيانات بين الأنظمة هي تخزينها في مكونات، ثم يقوم كل نظام بالوصول إلى هذه المكونات بالتتابع. على سبيل المثال، يمكن تحديث موقع كائن ما بانتظام، ثم تستخدمه الأنظمة الأخرى. في حال وجود العديد من الأحداث غير المتكررة، سيتطلب الأمر عددًا كبيرًا من المؤشرات في مكون واحد أو أكثر. وسيتعين على الأنظمة حينها مراقبة هذه المؤشرات في كل دورة، مما قد يؤدي إلى عدم الكفاءة. يتمثل الحل في استخدام نمط المراقب ، حيث تشترك جميع الأنظمة التي تعتمد على حدث ما في هذا النمط. وبالتالي، يتم تنفيذ الإجراء الناتج عن الحدث مرة واحدة فقط عند وقوعه، دون الحاجة إلى الاستقصاء الدوري.
لا تواجه بنية المكونات (ECS) أي مشكلة مع تبعيات المكونات الشائعة في البرمجة كائنية التوجه، لأن المكونات عبارة عن حاويات بيانات بسيطة ولا تعتمد على أي مكونات أخرى. عادةً ما يستعلم كل نظام عن مجموعة المكونات التي يجب أن يمتلكها الكيان لكي يعمل النظام عليه. على سبيل المثال، قد يسجل نظام العرض النموذج والتحويلات ومكونات الرسم. عند تشغيله، ينفذ النظام منطقه على أي كيان يحتوي على جميع هذه المكونات. يتم تجاهل الكيانات الأخرى ببساطة، دون الحاجة إلى أشجار تبعية معقدة. مع ذلك، قد يكون هذا بيئة خصبة لاختباء الأخطاء، لأن نقل القيم من نظام إلى آخر عبر المكونات قد يصعب تصحيحه. يمكن استخدام بنية المكونات (ECS) عندما يلزم ربط البيانات غير المترابطة بفترة زمنية محددة.
يستخدم نظام ECS التركيب بدلاً من أشجار الوراثة . يتكون الكيان عادةً من مُعرّف وقائمة بالمكونات المرتبطة به. يمكن إنشاء أي كائن لعبة بإضافة المكونات المناسبة إلى الكيان. يتيح هذا للمطور إضافة ميزات بسهولة إلى الكيان، دون أي مشاكل في التبعيات. على سبيل المثال، يمكن إضافة مكون رصاصة إلى كيان اللاعب، مما يجعله مؤهلاً للعمل مع نظام معالجة الرصاص ، وبالتالي يمكن أن تُلحق هذه الرصاصة الضرر بالكائنات الأخرى عند اصطدامها بها.
أشاد العديد من مطوري الألعاب، مثل آدم مارتن، بمزايا استخدام نظام تخزين البيانات المحسّن (ECS) لحفظ حالة اللعبة. ومن الأمثلة الجيدة على ذلك مدونات ريتشارد لورد، حيث يناقش فيها مزايا أنظمة تخزين بيانات الألعاب المصممة باستخدام نظام ECS، ويوضح سبب فائدتها الكبيرة. [ 14 ]
انظر أيضاً
ملحوظات
مراجع
- 1 2 بيلاس، سكوت. "نظام كائنات لعبة قائم على البيانات" (ملف PDF) . مؤرشف (ملف PDF) من الأصل في 18 سبتمبر 2013. تم الاطلاع عليه في 25 ديسمبر 2013 .
- ↑ بيلاس، سكوت. "صوت نظام كائنات اللعبة القائم على البيانات" . مؤرشف من الأصل في 18 أبريل 2025. تم الاسترجاع في 18 أبريل 2025 .
- ↑ روميو، فيتوريو. (2016): تحليل تقنيات ترميز الكيانات، وتصميم وتنفيذ مكتبة C++14 متعددة الخيوط لنظام الكيانات والمكونات في وقت الترجمة 10.13140/RG.2.1.1307.4165. ( https://www.researchgate.net/publication/305730566_Analysis_of_entity_encoding_techniques_design_and_implementation_of_a_multithreaded_compile-time_Entity-Component-System_C14_library )
- ↑ Open Robotics. "مرجع واجهة برمجة تطبيقات Gazebo Sim: دروس تعليمية: المصطلحات" . تم الاطلاع عليه بتاريخ 10 سبتمبر 2025 .
- ↑ لين أندريا شتاين، هنري ليبرمان، ديفيد أونغار: رؤية مشتركة للمشاركة: معاهدة أورلاندو . في: وون كيم، فريدريك هـ. لوخوفسكي (محرران): مفاهيم البرمجة الكائنية، وقواعد البيانات، والتطبيقات. مطبعة ACM، نيويورك 1989، الفصل 3، الصفحات 31-48 . ISBN 0-201-14410-7( مؤرشف على الإنترنت بتاريخ 2016-10-07 في موقع Wayback Machine )
- 1 2 "ويكي أنظمة الكيانات" . مؤرشف من الأصل في 31 ديسمبر 2019. تم الاسترجاع في 31 ديسمبر 2019 .
- ↑ ساذرلاند، إيفان إدوارد (يناير 1963). "سكيتش باد: نظام اتصال رسومي بين الإنسان والآلة (بإذن من مختبر الحاسوب، جامعة كامبريدج UCAM-CL-TR-574 سبتمبر 2003)" . معهد ماساتشوستس للتكنولوجيا . تم الاطلاع عليه بتاريخ 26 ديسمبر 2006 .
- ↑ "نمط التصميم المجهول" . 11 مارس 2021.
- ↑ "طور هيكلك الهرمي" . 5 يناير 2007.
- ↑ مارتن، آدم. "أنظمة الكيانات هي مستقبل تطوير ألعاب MMOG" . مؤرشف من الأصل في 26 ديسمبر 2013. تم الاطلاع عليه في 25 ديسمبر 2013 .
- 1 2 مارتن، آدم. "أنظمة الكيانات هي مستقبل تطوير ألعاب MMOG - الجزء الثاني" . مؤرشف من الأصل بتاريخ 26 ديسمبر 2013. تم الاطلاع عليه بتاريخ 25 ديسمبر 2013 .
- ↑ "تقديم GameplayKit - مؤتمر WWDC 2015 - مقاطع فيديو" . مؤرشف من الأصل بتاريخ 2017-10-06 . تم الاطلاع عليه بتاريخ 2017-10-06 .
- ↑ "Unity تطلق عرضًا تجريبيًا لمدينة ضخمة - ملايين العناصر في عالم سايبربانك هائل" . MCV/DEVELOP . 24-10-2018 . تم الاطلاع عليه بتاريخ 24-06-2021 .
- ↑ "لماذا نستخدم بنية نظام الكيانات والمكونات لتطوير الألعاب؟" . www.richardlord.net . تاريخ الاسترجاع: 18 نوفمبر 2021 .
روابط خارجية
- النمط المعماري (علوم الحاسوب)
- أنماط تصميم البرمجيات
