تخصيص الشاشة المنقسمة في Unreal Engine باستخدام إضافة بسيطة
أحدثت قوة Unreal Engine وتعدد استخداماته ثورة في صناعة الألعاب، مما مكّن المطورين من إنشاء عوالم رقمية مذهلة يستكشفها اللاعبون. ومن بين ميزاته العديدة، كانت القدرة على تنفيذ وظيفة الشاشة المنقسمة للألعاب متعددة اللاعبين مفضلة لدى الكثيرين منذ فترة طويلة. تتيح ألعاب الشاشة المنقسمة للأصدقاء التجمع حول شاشة واحدة والانخراط معًا في تجارب متعددة اللاعبين مثيرة. في هذه المقالة، نريد التحدث عن هذه الوظيفة وكيف يمكن تخصيصها باستخدام إضافات Unreal Engine.
لنبدأ بمقدمة قصيرة. Unreal Engine Split Screen هي ميزة تتيح عرض منافذ عرض متعددة في نافذة تطبيق واحدة. وهي شائعة الاستخدام، على سبيل المثال، في الألعاب التي تتضمن ميزات اللعب الجماعي المحلي. Unreal Engine يدعم تقسيم الشاشة بشكل جاهز، لكن التنفيذ يقتصر على بعض التخطيطات الأكثر شيوعاً فقط. في بعض الأحيان، لا يكون ذلك كافياً، وقد تتطلب بعض مشاريعك تخطيطاً مخصصاً. وهذا هو الحال، خاصةً عندما يتعلق الأمر بأحجام شاشات مختلفة لمشغلات مختلفة.
هذا الموضوع مهم بشكل خاص لـ واجهة الإنسان والآلة (HMI) و السيارات المشاريع. غالبًا ما تحتاج تلك المشاريع إلى منافذ عرض متعددة في تطبيق واحد لعرض جميع المعلومات المطلوبة. ولسوء الحظ، نادرًا ما تلبي شاشة العرض الافتراضية المنقسمة بالتساوي التي تستخدمها معظم الألعاب احتياجات التطبيق الصناعي.
في هذه المقالة، نريد أن نوضح لك كيف يمكن تحقيق تخطيط شاشة مقسمة (Split Screen) مخصص في Unreal Engine باستخدام الإضافات (plugins). بالطبع، هناك طرق أخرى لتحقيق نتيجة مماثلة. يمكنك الوصول إلى ذلك، على سبيل المثال، من خلال تعديل الكود المصدري لـ Unreal Engine مباشرة. ومع ذلك، يتطلب هذا النهج إعادة بناء المحرك بالكامل، وهو أمر يستغرق وقتًا طويلاً وقد يكون محفوفًا بالمشاكل. كانت إضافة الكود مباشرة إلى المشروع ممكنة أيضًا بالطبع، لكن استخدام إضافة Unreal Engine يسهل إعادة استخدامه في مشاريع مختلفة.
سيناريو واقعي لهذا النهج سيكون HMI DigiTwin المشروع، حيث أردنا ثلاثة منافذ عرض مع خيار التبديل إلى منفذ واحد يملأ المنطقة بأكملها:


دون مزيد من التأخير، لننتقل مباشرة إلى كيفية القيام بذلك.
كيفية تخصيص تقسيم الشاشة في Unreal Engine
أولًا، لننشئ مشروع Unreal Engine جديد. اختر أحد القوالب أو استخدم مشروعًا موجودًا (إذا كنت تفضل ذلك).
تذكّر تفعيل دعم C++.

الآن نحتاج إلى تمكين اللعب الجماعي المحلي.
افتح مخطط المستوى، تمامًا كما في الشاشة أدناه:

أنشئ لاعبين إضافيين بمعرّف وحدة تحكم 1 و2:

قم بتشغيل المشروع للتحقق من النتيجة؛ سيتم استخدام تقسيم الشاشة الافتراضي لثلاثة لاعبين:

إنشاء إضافة جديدة
افتح قائمة إضافات Unreal Engine باختيار Edit -> Plugins:

اضغط على "Add"، ثم اختر "Blank" وأدخل اسمًا للإضافة الخاصة بك. أكّد بزر "Create Plugin":

إنشاء تطبيق GameViewportClient جديد
اختر Tools -> New C++ Class…، ثم انتقل إلى "All Classes" واختر GameViewportClient كفئة أصل.
تابع بالضغط على "التالي":

أدخل اسمًا للفئة الجديدة (على سبيل المثال، CustomGameViewportClient)، واختر الإضافة كوحدة هدف من القائمة المنسدلة:

سيفشل البناء في الوقت الحالي؛ وهذا أمر متوقع:

إصلاح مشكلة الرابط
انتقل إلى نافذة Visual Studio؛ ينبغي أن تكون قد فُتحت تلقائياً في الخلفية بحلول الآن.
الانتقال إلىPluginExample\Plugins\CustomSplitScreen\Source\CustomSplitScreen\CustomSplitScreen.Build.cs في شجرة المشروع.
حدد موقع "PrivateDependencyModuleNames" وأضف "InputCore" إلى القائمة:

أعد التجميع باستخدام زر Live Coding في محرر UE:

تنفيذ CustomGameViewportClient
يتم تخزين إعدادات تقسيم الشاشة في UGameViewportClientSplitscreenInfo وفهرستها بواسطة قيم ESplitScreenType::Type.
لنُعرّف معرّفًا (ID) لإعداد تقسيم الشاشة المخصص لدينا. للقيام بذلك، عرّف نوع enum جديدًا في CustomGameViewportClient.h بناءً على قيم ESplitScreenType الموجودة:
UENUM(BlueprintType) namespace ECustomSplitScreenType { enum Type { // 0 value required by UE None, // Custom Splitscreen, next value after last built-in splitscreen type ThreePlayer = ESplitScreenType::SplitTypeCount, SplitTypeCount }; }
لا تنسَ تضمين ترويسة VieportSplitscreen في الملف نفسه.
#include "Engine/ViewportSplitScreen.h"
بعد ذلك، لننفّذ المُنشئ (constructor). في CustomGameViewportClient.h، أعلن عنه تحت "public":
UCustomGameViewportClient();
بعد ذلك، في ملف المصدر CustomGameViewportClient.cpp، قم بتنفيذ المُنشئ (constructor) على النحو التالي:
UCustomGameViewportClient::UCustomGameViewportClient() : Super(FObjectInitializer::Get()) { // Resize SplitscreenInfo to fit our custom config SplitscreenInfo.SetNum(ECustomSplitScreenType::SplitTypeCount, false); // Fill the custom config SplitscreenInfo[ECustomSplitScreenType::ThreePlayer].PlayerData.Add(FPerPlayerSplitscreenData(0.33f, 1.00f, 0.66f, 0.00f)); //1 SplitscreenInfo[ECustomSplitScreenType::ThreePlayer].PlayerData.Add(FPerPlayerSplitscreenData(0.66f, 0.50f, 0.00f, 0.00f)); //2 SplitscreenInfo[ECustomSplitScreenType::ThreePlayer].PlayerData.Add(FPerPlayerSplitscreenData(0.66f, 0.50f, 0.00f, 0.50f)); //3 }
بعد ذلك، نحتاج إلى منطق مخصص لاختيار هذا التخطيط الجديد. يتم تنفيذ ذلك في طريقة UpdateActiveSplitscreenType.
نحتاج إلى تجاوزه في الفئة الفرعية لدينا:
virtual void UpdateActiveSplitscreenType() override;
وهنا تنفيذ أساسي:
void UCustomGameViewportClient::UpdateActiveSplitscreenType() { ECustomSplitScreenType::Type SplitType = ECustomSplitScreenType::None; const int32 NumPlayers = GEngine->GetNumGamePlayers(GetWorld()); if (NumPlayers == 3) { // If Player count is equal 3, select custom Splitscreen ActiveSplitscreenType = static_cast<ESplitScreenType::Type>(ECustomSplitScreenType::ThreePlayer); } else { // Otherwise fallback to default behaviour Super::UpdateActiveSplitscreenType(); } }
مرة أخرى، قم بالتصريف باستخدام زر Live Coding في محرر UE.
تكوين المشروع لاستخدام الفئة المُنشأة حديثاً
افتح Edit -> Project Settings…،
انتقل إلى Engine -> General Settings، وابحث عن Default Classes -> Game Viewport Client Class
أو ابحث ببساطة عن "Game Viewport" في مربع البحث
اختر CustomGameViewportClient من القائمة المنسدلة.

سيطلب محرر UE إعادة التشغيل؛ تابع:

شغّل المشروع وتحقق من النتيجة النهائية:

الملخص: استخدم الإضافة لتخصيص تقسيم الشاشة في Unreal Engine
هذا بالطبع مثال أساسي للغاية؛ يمكن أن تكون المنطقية والتخطيطات أكثر تعقيدًا بكثير. يمكنك إنشاء تخطيطات مخصصة حسب عدد اللاعبين، أو زيادة الحد الأقصى لعدد اللاعبين بما يتجاوز الافتراضي وهو 4، أو حتى نقل منافذ العرض وتغيير حجمها أثناء التشغيل (عن طريق تجاوز UGameViewportClient::LayoutPlayers()).
نأمل أن يكون هذا المقال مصدر إلهام لما هو ممكن. الكود الخاص بالإضافة البرمجية التي أُنشئت لهذا المقال متاح للتنزيل هنا.
هل تحتاج إلى دعم في التطوير باستخدام Unreal Engine؟ فريقنا مستعد لمساعدتك. قم بزيارة صفحة خدمات تطوير واجهة الإنسان والآلة لمزيد من المعلومات.
الأسئلة الشائعة
نعم. يتيح لك Unreal Engine تخصيص تخطيطات الشاشة المنقسمة، لكن الخيارات الافتراضية محدودة. لإنشاء تخطيطات أكثر تقدمًا، يمكنك تجاوز فئة GameViewportClient وتحديد ترتيب منفذ العرض الخاص بك. في المقال، نوضح كيفية القيام بذلك باستخدام إضافة خفيفة الوزن بدلًا من تعديل الكود المصدري للمحرك.
استخدام إضافة يحافظ على وحدات مشروعك ويجعله أسهل في الصيانة. بدلاً من تعديل الكود الأساسي لمحرك Unreal، تنفّذ المنطق المخصص داخل وحدة منفصلة. يجعل هذا النهج التحديثات أكثر أماناً ويسمح بإعادة استخدام وظيفة تقسيم الشاشة عبر المشاريع.
GameViewportClient مسؤول عن إدارة منافذ العرض في Unreal Engine. من خلال إنشاء فئة مخصصة مشتقة من GameViewportClient، يمكنك تجاوز كيفية إنشاء منافذ العرض وتحديد مواضعها وعرضها، مما يتيح تخطيطات شاشة مقسّمة مخصصة بالكامل.
تُعد تخطيطات الشاشة المنقسمة المخصّصة مفيدة عندما لا تتوافق التخطيطات القياسية مع احتياجات تطبيقك. وقد يحدث ذلك في بيئات المحاكاة، أو أنظمة واجهة الإنسان والآلة HMI، أو المشاريع متعددة اللاعبين حيث تحتاج منافذ العرض المختلفة إلى أحجام أو ترتيبات مختلفة.
arrow_circle_rightاتصل بنا
هل تحتاج إلى دعم في التطوير باستخدام Unreal Engine؟ فريقنا مستعد لمساعدتك
arrow_circle_right مقالات أخرى