Header Image 10

التحكم بأبواب متعددة باستخدام برنامج واحد

من المهام التي كنت أحمل همها في التوسعة هو إنشاء وبرمجة أبواب اللعبة. والمقصود بالأبواب هنا هي التي تدخلها لتنتقل إلى موقع آخر بدون أن يكون الموقع السابق في مجال الرؤية
. بالتعريف هذا يمكنك أن تتخيلها كأنابيب لعبة Mario World التي تعمل warp لك. ألال بها 6 أبواب, جهتي الباب الواحد تعد كبابين مستقلين. أي إن باب المطبخ مثلا تحسب بابين. المنطق المتبع في ألال للأبواب هي أن كل باب له برنامج\سكربت خاص به. فيه أن عندما يضغط اللاعب داخل حيز الباب, البرنامج يغير إحداثيات المنطقة المنتقلة إليه. تخيل ماذا يجب عليك متابعته كمبرمج:

  • 6 أبواب برسمها وأسمائها.
  • 6 برامج\سكربت
  • 6 إحداثيات

إلى الآن الوضع مقبول وتحت السيطرة. ولكن في توسعة ألال عدد الأبواب ستزداد إلى 25 على الأقل. تخيل إنشاء متابعة +25 برنامج وإحداثية!
[​IMG]

أثناء إنشاء الـ25 باب ببرامجها خطرت ببالي فكرة. هل يمكنني استخدام برنامج واحد فقط للتحكم بجميع الأبواب, الموجودة والمضافة مستقبلا؟
أكبر مشكلتين هما أن كل باب له اسم خاص, والطامة الكبرى هى إحداثيات التنقل. حيث يجب إنشاء جدول من +25 صف, كل بإحداثية الـX,Y. وهذا يعني الدخول في يونيتي وتحريك شخصيتك إلى الـ+25 موقع وتسجيل إحداثياتها. عمل ممل ومكدر.
تبين أن الحل أسهل بكثير مما توقعت!

  • أنشئ بابا بحيث يكون المحور Pivot عند موضع الباب الطبيعي بارتفاع محور شخصية اللاعب عن الأرض.
  • أضف صادم Collider للباب وحولها إلى مجسة\ زناد Trigger.
  • إنشئ البرنامج Script وضفها للباب. ثم استنسخ الباب ووزعها على أماكنها حسب إحتياجك.
  • سمي كل باب باسم متميز سهل التفسير. بالنسبة لي الاسم يتضمن رمز مشترك بين المدخل والمخرج, والغرفة التي تقع فيها.
  • في البرنامج أنشئ مصفوفة Array تتضمن أسماء الأبواب بالترتيب. أي (مدخل أ,مخرج أ),(مدخل ب,مخرج ب), إلخ.
  • في وظيفة التهيئة Start Function اعمل بحث في المصفوفة لاسم الذات Game Object Name. لأنك رتبت المصفوفة كمدخل ثم مخرج, عند إيجاد الاسم, فإن العنصر التالي في المصفوفة هو الباب المرادف.
  • احفظ الباب المرادف في متغير.
  • في وظيفة دخول الصادم OnTriggerEnter اجلب إحداثيات الباب المرادف Transform Position واستبدل بها إحداثيات شخصية اللاعب.

لأنك وضعت محور الباب في الارتفاع المناسب, فإن شخصية اللاعب ستنتقل بشكل سلس لمكانها الجديد دون حدوث سقوط أو تعارض مع الأرضية. بهذه الطريقة استطعت الاستغناء عن +25 برنامج. تفاديت تسجيل +25 إحداثية. تجنبت البرمجة الكثيرة وأغلب العمل كان في شاشة اليونيتي GUI وبسرعة. وأي أبواب إضافية مستقبلا سيكون إضافتها سهلة جدا لأنها مجرد إضافة اسمين للمصفوفة التي تحتوي أسماء الأبواب.

[​IMG]

Leave a Reply

Your email address will not be published. Required fields are marked *