استكشف

مسارات في التصميم والألعاب والسينما — اختر مسارك وابدأ اليوم

مسارات يمكنك الانضمام إليها

مختارات

أعمال ونقاشات اختارها الفريق، وما تفاعل معه الزملاء هذا الأسبوعين

لا مختارات بعد — أول مشروع تنشره قد يكون هنا

اقرأ

  1. نصائح

    في بلندر: طبّق المقياس قبل أن تصدّر إلى المحرّك

    حين تكبّر جسماً بالضغط على S فأنت لا تغيّر الشبكة، بل تسجّل رقماً على الكائن يقول «اعرض هذا بضعف حجمه». بلندر يحترم الرقم، والمحرّك أحياناً لا يفعل.…

    اقرأ المزيد

    حين تكبّر جسماً بالضغط على S فأنت لا تغيّر الشبكة، بل تسجّل رقماً على الكائن يقول «اعرض هذا بضعف حجمه». بلندر يحترم الرقم، والمحرّك أحياناً لا يفعل. النتيجة المألوفة: نموذج يظهر سليماً في بلندر ثم يصل إلى Unity أو Unreal بحجم مضاعف، أو بمصادم فيزيائي لا يطابق ما تراه العين.

    والأثر يسبق التصدير أيضاً. Bevel يقيس العرض بوحدات الكائن، فمقياس غير منتظم مثل (1, 1, 0.4) يعطي حافة سميكة على محور ورفيعة على آخر، وكذلك يفعل Solidify ومحاكاة الأقمشة.

    العادة: قبل التصدير، وقبل أي مُعدِّل يعتمد على المسافات، اختر الكائن واضغط Object ▸ Apply ▸ Scale أو Ctrl+A ▸ Scale. تحقّق بعدها من لوحة العناصر بـ N — يجب أن يقرأ المقياس 1.0 على المحاور الثلاثة.

  2. نصائح

    في Unreal: استعمل IsValid لا المقارنة بـ None

    المرجع في Unreal لا يمرّ بحالتين بل بثلاث: فارغ، وسليم، ومُدمَّر لكن ما زال هناك من يمسك به. المقارنة != None تفرّق بين الأولى والثانية فقط، فيمرّ…

    اقرأ المزيد

    المرجع في Unreal لا يمرّ بحالتين بل بثلاث: فارغ، وسليم، ومُدمَّر لكن ما زال هناك من يمسك به. المقارنة != None تفرّق بين الأولى والثانية فقط، فيمرّ الفرع الخاطئ على عدوّ استُدعي عليه Destroy Actor قبل لحظة، ويأتيك الانهيار من داخل الدالة التالية لا من مكان الخطأ.

    عقدة IsValid تتحقق من الحالتين معاً، وهي عقدة واحدة بمخرَجين تغني عن الفرع اليدوي كله. في C++‎ الأمر نفسه: if (IsValid(Target)) وليس if (Target != nullptr).

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

  3. نصائح

    في Unity: لا تقيس الأداء داخل المحرّر

    أرقام الـ Profiler داخل المحرّر ليست أرقام لعبتك. المحرّر يشغّل حلقته الخاصة، ويحمّل الأصول بصيغ غير مضغوطة، ويخصّص ذاكرة لأدواته هو، فتظهر في الرسم…

    اقرأ المزيد

    أرقام الـ Profiler داخل المحرّر ليست أرقام لعبتك. المحرّر يشغّل حلقته الخاصة، ويحمّل الأصول بصيغ غير مضغوطة، ويخصّص ذاكرة لأدواته هو، فتظهر في الرسم البياني قمم تختفي تماماً في البناء النهائي — وتضيع ليلة كاملة في مطاردة تكلفة لا وجود لها.

    الطريقة الصحيحة: File ▸ Build Settings، فعّل Development Build وAutoconnect Profiler، وابنِ إلى الجهاز الذي ستُلعب عليه اللعبة فعلاً، ثم اربط الـ Profiler بالبناء العامل.

    وقبل قراءة أي رقم، افتح عمود GC Alloc ورتّب حسبه. التخصيص المتكرّر في كل إطار — سلسلة نصّية تُبنى داخل Update، أو Physics.RaycastAll تعيد مصفوفة جديدة — لا يظهر كبطء لحظي بل كتوقّف مفاجئ كل بضع ثوانٍ حين يمرّ جامع القمامة. وهذا التوقّف هو ما يشتكي منه اللاعب، لا متوسّط الإطارات.

  4. نصائح

    في Unity: قسّم الكود بملفات asmdef ليقصر زمن الانتظار

    افتراضياً، كل ملف .cs في مشروعك يقع في تجميعة واحدة ضخمة اسمها Assembly-CSharp. أي تعديل على أي سطر يعيد ترجمة كل شيء، ومع نمو المشروع يتحوّل تغيير…

    اقرأ المزيد

    افتراضياً، كل ملف .cs في مشروعك يقع في تجميعة واحدة ضخمة اسمها Assembly-CSharp. أي تعديل على أي سطر يعيد ترجمة كل شيء، ومع نمو المشروع يتحوّل تغيير رقم واحد إلى انتظار عشرين ثانية قبل أن تعود إلى وضع التشغيل.

    الحلّ: Assets ▸ Create ▸ Assembly Definition داخل كل مجلّد نظام رئيسي — الحركة، والواجهة، والحفظ، والذكاء الاصطناعي — ثم اربط الاعتماديات صراحة في حقل Assembly Definition References. بعدها، تعديل في الواجهة يترجم الواجهة وحدها.

    وهناك فائدة أهمّ من السرعة. الروابط التي تضطرّ لتصريحها تجعل الاعتماديات مرئية: إن اكتشفت أن نظام الحركة يحتاج مرجعاً إلى تجميعة القائمة الرئيسية، فقد كشف المُترجم للتوّ خطأً معمارياً كان مختبئاً خلف using عابر. ابدأ بحدّين أو ثلاثة لا بعشرة — التقسيم الزائد يصنع مشكلة مراجع بدل مشكلة انتظار.

  5. نصائح

    في Unreal: واجهة Blueprint بدل Cast To

    عقدة Cast To مريحة، لكنها تفعل شيئين لا تراهما. أولاً تنشئ مرجعاً صريحاً (hard reference) إلى الصنف الذي تحوّل إليه، فيُحمَّل ذلك الصنف — ومعه كل ما…

    اقرأ المزيد

    عقدة Cast To مريحة، لكنها تفعل شيئين لا تراهما. أولاً تنشئ مرجعاً صريحاً (hard reference) إلى الصنف الذي تحوّل إليه، فيُحمَّل ذلك الصنف — ومعه كل ما يشير إليه من مواد ونماذج وأصوات — في اللحظة التي يُحمَّل فيها الـ Blueprint الذي يحتوي العقدة. باب واحد يحوّل إلى BP_PlayerCharacter يكفي ليجرّ الشخصية كاملة إلى ذاكرة القائمة الرئيسية.

    وثانياً، النتيجة تفشل بصمت مع أي صنف آخر. تكتب باباً يُفتح للاعب، ثم يأتي الذكاء الاصطناعي أو النسخة القابلة للتدمير من الشخصية فلا يحدث شيء، ولا رسالة خطأ في أي مكان.

    البديل: Content Browser ▸ Blueprints ▸ Blueprint Interface. عرّف دالة مثل Interact أو CanOpenDoor، ثم في الباب استدعِ الرسالة على الفاعل مباشرة بدل التحويل. من ينفّذ الواجهة يستجيب، ومن لا ينفّذها يتجاهلها. الباب لا يعرف شيئاً عن اللاعب، وحجم مستواك في الذاكرة يبقى حجم مستواك.

  6. نصائح

    في بلندر: ترتيب المُعدِّلات ليس تفصيلاً شكلياً

    مكدّس المُعدِّلات يُنفَّذ من الأعلى إلى الأسفل، ونتيجة كل واحد هي مُدخَل الذي يليه. لذلك Mirror فوق Subdivision Surface وBevel ليست تفضيلاً بل قاعدة:…

    اقرأ المزيد

    مكدّس المُعدِّلات يُنفَّذ من الأعلى إلى الأسفل، ونتيجة كل واحد هي مُدخَل الذي يليه. لذلك Mirror فوق Subdivision Surface وBevel ليست تفضيلاً بل قاعدة: إن نزل المرآة تحت التنعيم فأنت تنعّم نصفاً ثم تعكسه، فتنطبع خياطة واضحة في منتصف النموذج مهما دقّقت في الرؤوس.

    الترتيب الذي يعمل في أغلب النماذج الصلبة: Mirror ▸ Bevel ▸ Subdivision Surface، مع تفعيل Clipping في المرآة لتلتحم الرؤوس عند المستوى بدل أن تعبره.

    المكان: Properties ▸ Modifier Properties (أيقونة المفتاح) ▸ Add Modifier، والسحب من النقاط الست أو Ctrl+Page Up لتحريك مُعدِّل في المكدّس. وقبل أي Bevel: طبّق المقياس بـ Ctrl+A ▸ Scale، وإلا خرج عرض الحافة مختلفاً على كل محور.

ستارة