نقل البيانات عبر المشهد في الوحدة - تطبيق القيم المتعددة على تطوير اللعبة البسيطة

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

دعنا نتحدث عن فئات ثابتة لتخزين البيانات ، وطرق مختلفة لتحميل المشاهد باستخدام محرك Unity ، وكذلك لمس حالة توصيل Admob بالمشروع. المعلومات المقدمة من الوثائق الرسمية ومجتمع المطورين ودية.

الوضع


تتكون لعبتي من مشهدين - القائمة الرئيسية ، التي يمكن رؤيتها فور التحميل ، وبشكل مباشر ، مشهد اللعبة مع الميكانيكا ، والذي يتم فيه تحميل العنصر المسبق للكائن بناءً على الخيار المحدد. لم يكن بالإمكان دمجها في مشهد واحد ، حيث إن العديد من الكائنات المعقدة مرتبطة بالقائمة ، وهي أكثر ملاءمة للفصل بين الكيانات.

في السابق ، كنت أود فقط استخدام كائن تحكم معين لتخزين البيانات ، ولكن مع تفريغ المشهد ، لم يعد موجودًا.

نقل البيانات (فئة ثابتة)


اتضح أن الوحدة ممتازة في التعامل مع الكود ، حتى لو كانت تكمن في ملف في مجلد البرامج النصية بشكل سلمي ولم يتم إرفاقها بواسطة أحد العناصر لكائن في المرحلة (لم يكن ذلك واضحًا للمبتدئين). على سبيل المثال ، يمكن أن يكون مثل هذا الملف فئة ثابتة من هذا النوع:

using UnityEngine; public static class DataHolder { private static GameObject prefabName; public static GameObject Prefab { get { return prefabName; } set { prefabName = value; } } } 


وبالتالي ، تمكنت من حفظ اختيار المستخدم حتى بعد تفريغ المشهد وتحميل مشهد جديد. في البداية ، كان كل شيء يعمل بالضبط مع مشاهد التبديل الصعب.

باستخدام هذه الآلية ، يمكنك أيضًا نقل الإعدادات إلى المشاهد الأخرى من القائمة ، على سبيل المثال ، لغة الترجمة وإعدادات الأصوات والموسيقى وغير ذلك الكثير.

متعدد القيم (إدارة المشهد)


كل شيء يناسبني وهكذا ، حتى تلقيت مهمة الاتصال بمشروع Admob (الإعلان) ، بحيث تم عرض الفيديو مباشرة في بداية مشهد اللعبة. كما اتضح فيما بعد ، هناك بعض التفاصيل الدقيقة: إن طلب مقطع فيديو يستغرق وقتًا كبيرًا ، وليس لديه وقت للوصول عند تبديل المشاهد. لم أكن أرغب في تأخير التأخير الإضافي في المشروع ، خاصة وأن لدينا الكثير من الوقت حتى يتمسك "اللاعب" بالقائمة. ثم اكتشفت أنه ليست هناك حاجة إلى تبديل المشاهد "بجد" ، لأن هناك خيارًا رائعًا للتحميل الإضافي (دون تفريغ المشهد السابق).

أقوم بتحميل مشهد اللعبة باستخدام وحدة تحكم القائمة (المشهد مع القائمة ويظل كائن الإعلان محملاً أيضًا):

 SceneManager.LoadScene(1,LoadSceneMode.Additive); 

عند الانتهاء من المستوى ، أفرغ مشهد اللعبة بوحدة التحكم في اللعبة (بحيث لا يتعطل في ذاكرتي):

 SceneManager.LoadScene(0,LoadSceneMode.Single); 

باستخدام مثل هذا المخطط ، يتم تحميل الإعلانات على الفور في بداية التطبيق ، ويمكنك استدعاء عرض الإعلان في أي وقت مطلوب. يمكنك أن تفعل الشيء نفسه مع أي كائنات تحتاج إليها.

المشاكل


لسوء الحظ ، حتى مع التحميل الإضافي للمشاهد ، لن تتمكن من الخوض في كائنات من مشهد آخر. يجب أن يتم نقل الارتباطات إلى الكائنات عبر "وسيط" معين (في حالتي ، تم استخدام نفس الفئة الثابتة).

كن حذرًا عند إنشاء مجموعات جاهزة ، إذا كانت هناك عدة مشاهد نشطة - فبالنسبة لي ، قرروا جميعًا الدخول إلى المشهد الخطأ (المزيد في ذلك الوقت الآخر).

Source: https://habr.com/ru/post/ar440718/


All Articles