تصميم الأداء يعني اتباع مجموعة من أفضل الممارسات أثناء بناء لعبتك. مقارنةً بالعثور على مشكلات الأداء وإصلاحها لاحقًا في عملية التطوير، فإن تصميم الأداء مبكرًا يمكن أن يوفر لك الكثير من الوقت والجهد.
الأجهزة المنخفضة
تواجه الأجهزة المنخفضة، وخاصة الأجهزة المحمولة، قيودًا شديدة في الذاكرة وهي عرضة الأعطال بسبب أخطاء نفاد الذاكرة (OOM):
إذا كنت ترغب في دعم الأجهزة المنخفضة، اختر على الأقل جهازًا واحدًا "أساسيًا"، اختبر لعبتك عليه طوال عملية التطوير، وراقب عن كثب معدل الإطارات واستخدام الذاكرة. بينما تجد مناطق المشكلة في لعبتك، استخدم تلك المناطق لتحديد حدود جهازك.
على سبيل المثال، قد تختبر لعبة مع تفعيل إحصائيات التصحيح Render (ShiftF2) و Summary (ShiftF2). إذا بدأ معدل الإطارات في الانخفاض في منطقة مشوشة بشكل خاص، يمكنك فحص أرقام Draw (scene) وتحديد أنك تحتاج إلى البقاء تحت 1,000 استدعاء رسم و1,000,000 مثلث لكي تعمل اللعبة بشكل جيد على جهازك الأساسي.
أو يمكنك فحص Developer Console (F9) وملاحظة أن استخدام الذاكرة مرتفع قليلاً ما لم تقم بتمكين البث. يمكن أن يساعد فهم واضح لحدود الأجهزة في مساعدتك على البقاء تحتها بينما تستمر في بناء لعبتك.

محاكي الأجهزة في Roblox Studio مفيد للتحقق من نسبة العرض إلى الارتفاع والتحكمات، لكنه ليس دقيقًا بالنسبة لاستخدام الذاكرة؛ عندما تختبر لعبة في Studio، فإنها تشغل الخادم والعميل، لذا فإن استخدام الذاكرة يكون أعلى بكثير.
بشكل عام، الاختبار على مجموعة متنوعة من الأجهزة يمكن أن يساعدك في التحقق من أن اللعبة تتطابق مع توقعاتك البصرية وأداءها على مستويات جودة الرسوم المختلفة. للحصول على مثال أكثر تفصيلاً حول كيفية التفكير في تحسين لعبتك للأجهزة المحمولة المنخفضة، راجع تحسينات البناء والبرمجة في العالم الحقيقي.
البث والنقل
بث الكائنات يتيح لروبلكس تحميل وتفريغ المحتوى ثلاثي الأبعاد ديناميكيًا وهو خيار رائع لمعظم الأماكن، وخاصة الأكبر منها. يعمل البث على تحسين أوقات الانضمام، وتقليل البصمة الذاكرة، وزيادة معدل الإطارات.
على سبيل المثال، عندما تقوم بتمكين Workspace.EnableSLIMAvatars وتعيين خاصية LevelOfDetail لنماذج عالمك إلى SLIM، يمكنك إنشاء عوالم مع مساحات اجتماعية وأحداث مزدحمة تبقى مرئية بينما تتدرج عبر نطاق واسع من قدرات الأجهزة. لمزيد من المعلومات، راجع SLIM وتحسين الأداء.
فكر في تقسيم الأماكن الكبيرة إلى أماكن أكثر قابلية للإدارة واستخدام النقل لنقل اللاعبين بينها. يمكن أن يقلل هذا من أوقات الانضمام الأولية، ولكنه يفرض أوقات انضمام إضافية عندما ينتقل اللاعبون من مكان إلى آخر. تختلف الفوائد بالنسبة لاستخدام الذاكرة اعتمادًا على حجم المكان وما إذا كنت قد قمت بتمكين البث.
حتى باستبعاد اعتبارات الأداء، قد تجد أن وجود أماكن متعددة يبسط عملية التطوير، خاصة إذا كنت تضيف محتوى جديدًا إلى لعبتك بشكل منتظم أو كنت جزءًا من فريق أكبر.
المواد والتكرار
تستخدم المواد المضمنة ذاكرة أقل بكثير من القوام المخصص، ولكن قد لا تتطابق مع رؤيتك الفنية. حاول استخدام المواد كلما كان ذلك ممكنًا من أجل الحفاظ على ميزانية الذاكرة للقوام التي تعتبر مركزية في لعبتك.
أثناء إنشاء الأصول، قم بتحويلها إلى حزم. تجعل الحزم جزءًا من سير العمل الخاص بك يساعد في تجنب مشكلة الأصول المتكررة ذات معرفات مختلفة، والتي يمكن أن تضر الأداء.
عند إضافة الرسوم ثلاثية الأبعاد والقوام، استخدمها وأعد استخدامها بدلاً من استيراد نسخ مكررة. من خلال تغيير الحجم، والتدوير، والتداخل، يمكنك إنشاء بيئات غنية ومتنوعة تتطلب عددًا قليلاً جدًا من استدعاءات الرسم. لمزيد من المعلومات، راجع إزالة القوام المكررة.
الشفافية
- تجنب قيم الشفافية بخلاف 0 (مرئي) و1 (غير مرئي). عند استخدام شفافية جزئية، كن حذرًا بشكل خاص لتجنب زيادة الشفافية العالية.
البرمجة
كلما أمكن ذلك، اكتب كود يعتمد على الأحداث بدلاً من الحسابات لكل إطار. عند 60 إطار في الثانية، الميزانية الإجمالية لكل إطار هي 16.67 مللي ثانية (مللي ثانية). حتى الحسابات البسيطة لكل إطار يمكن أن تستخدم جزءًا كبيرًا من تلك الميزانية.
ابحث عن طرق لتقسيم الكود الذي يستغرق وقتًا طويلاً إلى أجزاء قابلة للإدارة. إذا كان جزء من الكود يستغرق 100 مللي ثانية للتنفيذ وتعمل به في كل إطار، فإن لعبتك يمكن أن تعمل فقط بسرعة 10 إطارات في الثانية. إذا قررت تشغيل الكود مرة واحدة في الثانية في لعبة تعمل بسرعة 60 إطار في الثانية، فإن 59 من إطاراتك تصل بعد 16.67 مللي ثانية... ثم واحدة بعد 100 مللي ثانية، مما يسبب تلعثمًا واضحًا.
بدلاً من ذلك، تحقق من كيفية تقسيم الكود. ربما يمكنك أداء 5 مللي ثانية من العمل لكل إطار، استخدام task.wait()، والحصول على الحساب المكتمل كل 20 إطار بينما تحافظ على 60 إطار في الثانية. يمكن أن تساعد أيضًا البرمجة المتعددة الخيوط، والتي تُسمى أحيانًا Parallel Luau.
استخدم الطريقة RBXScriptConnection:Disconnect() لوقف استدعاء الوظائف دون داعٍ في المرة القادمة التي يتم فيها إطلاق حدث.
لا تقم باستدعاء نفس الطريقة في كل مرة تحتاج فيها إلى قيمة. استدعِ الطريقة مرة واحدة، واحفظ القيمة، ثم قم باستبدالها لاحقًا حسب الحاجة.
لا تخزن كل شيء في ReplicatedStorage. يقوم العميل بتحميل كل ما هو موجود في هذا الحاوية. بدلاً من ذلك، استخدم ServerStorage لأي شيء لا يحتاج العميل إلى الوصول إليه.