Menu
CoddyTech
flag Ar iconالعربيةdown icon

لماذا نعيد استخدام الكائنات

جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 37 من 50.

السلاح الذي يطلق 10 رصاصات في الثانية لمدة دقيقة يستدعي Instantiate 600 مرة وDestroy 600 مرة. كل استدعاء لـ Instantiate ينسخ الـ prefab مع جميع مكوّناته ويشغّل Awake وOnEnable وStart الخاصة بها. وكل استدعاء لـ Destroy يشغّل OnDisable وOnDestroy ويترك ذاكرة الكائن لتصبح قمامة. يحرر جامع القمامة في C# تلك الذاكرة لاحقًا، ويقع عمله في بعض الإطارات دون غيرها، ما يظهر على شكل تقطّع، ويكون أسوأ على الهواتف الأبطأ.

يحتفظ مجمّع الكائنات بالكائنات بدلًا من تدميرها. يُعطّل الرصاص المُستخدَم باستخدام SetActive(false) ويعود إلى المجمّع؛ وتُخرج الطلقة التالية كائنًا منه وتفعّله، ولا يُستدعى Instantiate إلا عندما يكون المجمّع فارغًا. بعد الثواني القليلة الأولى من إطلاق النار، لا ينتج عن الإطلاق أي شيء جديد ولا يخلّف قمامة. عند إعادة الاستخدام، لا يعمل Awake وStart مجددًا: فقد عملا مرة واحدة عند إنشاء الكائن. وأي شيء يجب أن يبدأ من جديد مع كل استخدام، مثل المؤقّت أو الصحة أو السرعة، يُعاد ضبطه في OnEnable أو بواسطة الشيفرة التي تُخرج الكائن.

يفيد تجميع الكائنات عندما تُنشأ الكائنات وتُهمل كثيرًا: مثل الرصاص والشرر وأرقام الضرر وأعداء ألعاب الموجات. لكنه لا يفيد مع زعيم يظهر مرة واحدة أو قائمة تُفتح بين الحين والآخر. يحتفظ المجمّع بذاكرة الكائنات غير النشطة طوال الوقت، لذا يُبقي عددًا معقولًا منها ويتخلّص من الزائد.

جرّب بنفسك

لا يتضمّن هذا الدرس تحدّيًا برمجيًا.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس هندسة الألعاب في Unity