لماذا نعيد استخدام الكائنات
جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 46 من 64.
السلاح الذي يطلق 10 رصاصات في الثانية لمدة دقيقة يستدعي Instantiate 600 مرة وDestroy 600 مرة. كل استدعاء لـ Instantiate ينسخ الـ prefab مع جميع مكوّناته ويشغّل Awake وOnEnable وStart الخاصة بها. وكل استدعاء لـ Destroy يشغّل OnDisable وOnDestroy ويترك ذاكرة الكائن لتصبح قمامة. يحرر جامع القمامة في C# تلك الذاكرة لاحقًا، ويقع عمله في بعض الإطارات دون غيرها، ما يظهر على شكل تقطّع، ويكون أسوأ على الهواتف الأبطأ.
يحتفظ مجمّع الكائنات بالكائنات بدلًا من تدميرها. يُعطّل الرصاص المُستخدَم باستخدام SetActive(false) ويعود إلى المجمّع؛ وتُخرج الطلقة التالية كائنًا منه وتفعّله، ولا يُستدعى Instantiate إلا عندما يكون المجمّع فارغًا. بعد الثواني القليلة الأولى من إطلاق النار، لا ينتج عن الإطلاق أي شيء جديد ولا يخلّف قمامة. عند إعادة الاستخدام، لا يعمل Awake وStart مجددًا: فقد عملا مرة واحدة عند إنشاء الكائن. وأي شيء يجب أن يبدأ من جديد مع كل استخدام، مثل المؤقّت أو الصحة أو السرعة، يُعاد ضبطه في OnEnable أو بواسطة الشيفرة التي تُخرج الكائن.
يفيد تجميع الكائنات عندما تُنشأ الكائنات وتُهمل كثيرًا: مثل الرصاص والشرر وأرقام الضرر وأعداء ألعاب الموجات. لكنه لا يفيد مع زعيم يظهر مرة واحدة أو قائمة تُفتح بين الحين والآخر. يحتفظ المجمّع بذاكرة الكائنات غير النشطة طوال الوقت، لذا يُبقي عددًا معقولًا منها ويتخلّص من الزائد.
جرّب بنفسك
لا يتضمّن هذا الدرس تحدّيًا برمجيًا.
جميع دروس هندسة الألعاب في Unity
1المكوّنات، لا التسلسلات الهرمية
مكوّنات صغيرةنص برمجي أساسي للعدومكوّنات مجرّدةالمكوّنات تعمل معًامراجعة: برج معياريمراجعة: مدفع مزدوج4البيانات المُسلسلة
الأصناف القابلة للتسلسلالقوائم في Inspectorالتعدادات في Inspectorمراجعة: جدول الغنائممراجعة: اختيار الغنائم عشوائيًا2الواجهات في Unity
IDamageableالواجهات وTryGetComponentGetComponentsمراجعة: مفتاح التفاعلمراجعة: أقرب عنصر ضمن النطاق3الأحداث
الأحداث في C# ضمن Unityالاشتراك في OnEnableحقول UnityEventالأحداث تحرّك واجهة المستخدممراجعة: نافذة الإنجاز المنبثقةمراجعة: مؤقّت النافذة المنبثقة6الحفظ باستخدام JSON
JsonUtilityاحفظ اللعبةالتحميل والقيم الافتراضيةمراجعة: خانات الحفظاختر خانة واحذفها9تجميع الكائنات
لماذا نعيد استخدام الكائناتمجموعة باستخدام طابورObjectPool في Unityمراجعة: مجموعة الرصاصاتتدرّب بنفسك: Playground لـ Unity