Nakama هو خادم مفتوح المصدر مصمم لتشغيل الألعاب والتطبيقات الحديثة. تتضمن الميزات حسابات المستخدمين ، والدردشة ، والاجتماعية ، وصانع الثقاب ، ومتعدد اللاعبين الحقيقيين ، وأكثر من ذلك بكثير.
يقوم هذا العميل بتنفيذ خيارات API والمقبس الكاملة مع الخادم. إنه مكتوب في C ++ مع الحد الأدنى من التبعيات لدعم Unreal 4 و 5.
إذا واجهت أي مشكلات مع العميل ، فقد يكون من المفيد تمكين سجلات التصحيح وفتح مشكلة.
الوثائق الكاملة على الإنترنت - https://heroiclabs.com/docs
يمكن أيضًا استخدام هذا البرنامج المساعد للمبرمجين الذين يحبون C ++ أو مخططات. جميع المتغيرات والوظائف تتعرض للأنواع المستخدمة من قبل محرك غير واقعي (Undroperties ، uttruct ، ufunctions وما إلى ذلك)
ينقسم البرنامج المساعد إلى ثلاث وحدات يمكن سحبها اعتمادًا على احتياجاتك.
NakamaUnreal الوحدة النمطية C ++ الموصى بها لاستخدام nakama في unrealengine. هذا يتكامل مع الأنواع الأصلية لـ Unreal و UOBjects.NakamaBlueprints للمستخدمين الذين يفضلون استخدام المخططات في مشروعهم.NakamaCore للمستخدمين الذين ينقلون من عميل Pre-V2.6.0 غيرهم ويريدون إجراء تغييرات الحد الأدنى ، أو استخدام API C ++ منخفض المستوى بدون أنواع غير حقيقية: (https://github.com/heroiclabs/nakama-cpp).نظرًا لأن
NakamaCoreيستخدم المكتبات المسبقة ، فقد تواجه مشكلات في البناء بسبب الاختلافات في أدوات Unreal من أدوات C ++ القياسية. هذا هو السبب في أنNakamaUnrealهي الوحدة الموصى بها.
تتم إحالة العملاء في هذا الوثائق كعميل في الوقت الفعلي والعميل الافتراضي الذي يكون فيه العميل الحقيقي هو المقبس والعميل الافتراضي يستخدم API REST للتواصل مع Nakama.
ستحتاج إلى إعداد الخادم وقاعدة البيانات قبل أن تتمكن من الاتصال بالعميل. أبسط طريقة هي استخدام Docker ولكن إلقاء نظرة على وثائق الخادم لخيارات أخرى.
للبدء في استخدام Nakama In Unreal ، ستحتاج إلى ما يلي:
أيضًا ، يرجى التأكد من أن مشروع Unreal الخاص بك هو مشروع C ++. إذا كانت مخططات فقط ، فيمكنك إضافة ملف C ++ جديد إلى مشروعك في محرر Unreal عبر "File -> New C ++ Class". اضبطها خاصة وتسمية ما تريد. امتلاك هذا الملف في مشروعك يتيح تجميع المكون الإضافي.
لاستخدام Nakama في مشروع Unreal Project الخاص بك ، ستحتاج إلى تنزيل المكون الإضافي الخاص بنا من Unreal Marketplace أو نسخ ملفات Nakama-unreal التي قمت بتنزيلها في المكان المناسب. للقيام بهذا الأخير:
C:\MyUnrealProject\ ) في المستكشف أو الباحث.Plugins هنا.Nakama من Nakama-Unreal ووضعه في مجلد Plugins اختياريًا: يمكنك وضع الإضافات داخل مجلد Unreal Engine Plugin (على سبيل المثال ، C:Program FilesEpic GamesUE_4.26EnginePluginsMarketplace ) لاستخدام المكون الإضافي في مشاريع متعددة.
في هذه المرحلة ، لقد انتهيت. أعد تشغيل غير واقعي. بعد أن يجمع الأشياء ، افتح الإضافات-> الإضافات والتمرير إلى الأسفل. إذا سارت الأمور على ما يرام ، فيجب أن ترى Heroiclabs.nakama مدرجة كمساعد.
العملاء
عليك أن تقرر المكان الذي تريد إنشاءه والاحتفاظ بسجل لهؤلاء العملاء.
جلسات
الجلسات عبارة عن uobjects المحمولة التي تحتوي على مؤشر جلسة وهيكل مع البيانات الفعلية في الجلسة ، مثل الرموز ، وبيانات المستخدم ، وإنهاء صلاحية معلومات ذلك. هناك أيضًا بعض وظائف الأداة المساعدة المقدمة مع كائنات الجلسة ، مثل الحصول على متغير محدد أو استعادة الجلسة.
نظام علامة
عادةً ما يتعين عليك التعامل مع Ticking على أساس C ++ ، ولحسن الحظ يتم ذلك تلقائيًا تحت الغطاء في هذا البرنامج المساعد بعد إنشاء العميل. عندما تقوم بإنشاء العميل ، يمكنك تحديد فاصل زمني للعلامة ، بشكل افتراضي يتم تعيينه على 0 ، مما يعني أنه سيضع علامة في كل إطار ، إذا كنت تريد أن يتم وضع علامة على كل 50 مللي ثانية ، فيجب عليك تعيينها على أنها 0.05 ، لجعله علامة كل ثانية سيكون هذا الرقم 1.
فيما يلي مثال بسيط على إعداد عميل افتراضي ، ومصادقة ، وإعداد عميل في الوقت الفعلي والانضمام إلى غرفة الدردشة. في المثال ، سوف نضع كل شيء في فئة Frant Aactor التي يتم وضعها في المستوى.
تذكر أن تضيف NakamaUnreal إلى تبعياتك الخاصة ضمن ملف Build.cs Project الخاص بك. على سبيل المثال:
PrivateDependencyModuleNames . AddRange ( new string [ ] { "NakamaUnreal" } ) ;بدءًا من المتغيرات العامة للرؤوس ، نستخدم ممثلًا فارغًا سيتم وضعه في المشهد في هذا المثال. يستخدم Unreal Engine نظامًا انعكاسًا يوفر بيانات تعريف حول فصوله ويسمح بميزات متقدمة مثل اتصالات Blueprint/C ++ ، والتسلسل ، وأكثر من ذلك. عند العمل مع كائنات Nakama ، أو أي فئة مشتقة من UOBject ، من الأهمية بمكان وضع علامة عليها باستخدام نظام الانعكاس غير الواقع. يتم ذلك باستخدام وحدات الماكرو مثل UFunction () ، و uproperty ().
UPROPERTY ()
UNakamaClient* NakamaClient;
UPROPERTY ()
UNakamaRealtimeClient* NakamaRealtimeClient;
UPROPERTY ()
UNakamaSession* UserSession;
UFUNCTION ()
void OnAuthenticationSuccess(UNakamaSession* LoginData);
UFUNCTION ()
void OnAuthenticationError( const FNakamaError& Error);
UFUNCTION ()
void OnRealtimeClientConnectSuccess();
UFUNCTION ()
void OnRealtimeClientConnectError( const FNakamaRtError& ErrorData);
// Initialize client and authenticate here
virtual void BeginPlay () override ;على سبيل المثال ، إذا كنت تريد أن يكون كائن Nakama متاحًا للتلاعب داخل محرر Blueprint ، فستضع علامة عليه بـ Uproperty ().
UPROPERTY (BlueprintReadWrite, EditAnywhere, Category= " Nakama " )
UNakamaClient* NakamaClientInstance;باستخدام محدد BluePrinTreadWrite ، يصبح متغير Nakamaclientinstance قابلًا للقراءة وقابل للكتابة في المخططات.
ثم داخل PLAY ، نقوم بإعداد العميل الافتراضي ، وتوثيق وربط المندوبين.
// Called when the game starts or when spawned
void AMyActor::BeginPlay ()
{
Super::BeginPlay ();
// Default Client Parameters
FString ServerKey = TEXT ( " defaultkey " );
FString Host = TEXT ( " 127.0.0.1 " );
int32 Port = 7350 ;
bool bUseSSL = false ;
bool bEnableDebug = true ;
// Setup Default Client
NakamaClient = UNakamaClient::CreateDefaultClient (ServerKey, Host, Port, bUseSSL, bEnableDebug);
// Authentication Parameters
FString Email = TEXT ( " [email protected] " );
FString Password = TEXT ( " verysecretpassword " );
FString Username = TEXT ( " debug-user " );
TMap<FString, FString> Variables;
// Setup Delegates of same type and bind them to local functions
FOnAuthUpdate AuthenticationSuccessDelegate;
AuthenticationSuccessDelegate. AddDynamic ( this , &AMyActor::OnAuthenticationSuccess);
FOnError AuthenticationErrorDelegate;
AuthenticationErrorDelegate. AddDynamic ( this , &AMyActor::OnAuthenticationError);
NakamaClient-> AuthenticateEmail (Email, Password, Username, true , Variables, AuthenticationSuccessDelegate, AuthenticationErrorDelegate);
}ثم استجابة عمليات الاسترداد للمصادقة
void AMyActor::OnAuthenticationSuccess (UNakamaSession* LoginData)
{
if (GEngine) GEngine-> AddOnScreenDebugMessage (- 1 , 15 . 0f , FColor::Green, FString::Printf ( TEXT ( " Authenticated As %s " ), *LoginData-> SessionData . Username ));
UserSession = LoginData;
// Setup Delegates of same type and bind them to local functions
FOnRealtimeClientConnected ConnectionSuccessDelegate;
ConnectionSuccessDelegate. AddDynamic ( this , &AMyActor::OnRealtimeClientConnectSuccess);
FOnRealtimeClientConnectionError ConnectionErrorDelegate;
ConnectionErrorDelegate. AddDynamic ( this , &AMyActor::OnRealtimeClientConnectError);
// This is our realtime client (socket) ready to use
NakamaRealtimeClient = NakamaClient-> SetupRealtimeClient ();
// Remember to Connect
bool bCreateStatus = true ;
NakamaRealtimeClient-> Connect (UserSession, bCreateStatus, ConnectionSuccessDelegate, ConnectionErrorDelegate);
}
void AMyActor::OnAuthenticationError ( const FNakamaError& Error)
{
if (GEngine) GEngine-> AddOnScreenDebugMessage (- 1 , 15 . 0f , FColor::Red, FString::Printf ( TEXT ( " Failed to Authenticate: %s " ), *Error. Message ));
}وأخيراً ، يمكنك الآن استخدام رد الاتصال العميل في الوقت الحقيقي ، يمكنك الآن استخدام عميل الوقت الحقيقي.
void AMyActor::OnRealtimeClientConnectSuccess ()
{
if (GEngine) GEngine-> AddOnScreenDebugMessage (- 1 , 15 . 0f , FColor::Green, FString ( TEXT ( " Socket Setup Success! " )));
// Example of Joining Chat without callbacks
NakamaRealtimeClient-> JoinChat ( " Heroes " , ENakamaChannelType::ROOM, true , false , {}, {});
}
void AMyActor::OnRealtimeClientConnectError ( const FNakamaRtError& ErrorData)
{
if (GEngine) GEngine-> AddOnScreenDebugMessage (- 1 , 15 . 0f , FColor::Red, FString ( TEXT ( " Socket Setup Failed! " )));
}إذا قمت بإعداد كل شيء بشكل صحيح ، فقم بإنشاء إصدار مخطط من هذا الممثل ووضعه على المستوى الذي ستشاهده رسائل على الشاشة تقول إنك مصادقة ، اسم المستخدم الخاص بك ، ثم رسم رسالة متصلة.
يوفر أحدث إصدار من Nakama Unreal مرونة لاستخدام إما Dynamic Multicast Delegates أو Lambdas (TFunctions) للتعامل مع وظائف وأحداث. فيما يلي مقارنة موجزة وإرشادات حول كيفية استخدامها:
AddDynamic . قدم نوع رد الاتصال المفضل لديك (إما delegate أو lambda ) في معلمات Success Error لوظيفة Nakama ذات الصلة.
إليك عرضًا لاستخدام lambdas كبديل delegates :
// Define success callback with a lambda
auto successCallback = [&](UNakamaSession* session)
{
UE_LOG (LogTemp, Warning, TEXT ( " Session Token: %s " ), *Session-> GetAuthToken ());
UE_LOG (LogTemp, Warning, TEXT ( " Username: %s " ), *Session-> GetUsername ());
};
// Define error callback with a lambda
auto errorCallback = [&]( const FNakamaError& Error)
{
UE_LOG (LogTemp, Warning, TEXT ( " Error Code: %d " ), Error. Code );
};
// Execute the AuthenticateEmail function with lambdas
Client-> AuthenticateEmail (TEXT( " [email protected] " ), TEXT( " verysecretpassword " ), TEXT( " debug-user " ), true, {}, successCallback, errorCallback);عند تهيئة عميلك في الوقت الفعلي ، من الضروري إنشاء مستمعي الأحداث للأحداث المهمة داخل اللعبة ، بدءًا من رسائل القناة والإشعارات إلى تفاعلات الحزب. يوفر Nakama Unreal المرونة من خلال السماح لكل من Lambdas والمندوبين لهذا الغرض.
// Start by creating a Realtime Client:
UNakamaRealtimeClient* Socket = NakamaClient-> SetupRealtimeClient ();
// When using delegates, you need to declare functions that match the delegate's signature:
Socket->ChannelMessageReceived.AddDynamic( this , &ANakamaActor::OnChannelMessageReceived);
Socket->NotificationReceived.AddDynamic( this , &ANakamaActor::OnNotificationReceived);
// Lambdas offer a concise way to define event handlers directly in-line:
// Note: A lambda can be bound only once.
Socket-> SetChannelMessageCallback ( []( const FNakamaChannelMessage& ChannelMessage)
{
UE_LOG (LogTemp, Warning, TEXT ( " Channel Message: %s " ), *ChannelMessage. Content );
});
Socket-> SetNotificationsCallback ( []( const FNakamaNotificationList& NotificationList)
{
UE_LOG (LogTemp, Warning, TEXT ( " Notifications: %d " ), NotificationList. Notifications . Num ());
for ( auto & Notification : NotificationList. Notifications )
{
UE_LOG (LogTemp, Warning, TEXT ( " Notification: %s " ), *Notification. Content );
}
});
// Establish a connection to start receiving events.
// Optional success and error callbacks (either lambdas or delegates) can be provided:
Socket-> Connect (Session, true );قد تبدو تطبيقات الوظائف مثل هذا:
void ANakamaActor::OnChannelMessageReceived ( const FNakamaChannelMessage& ChannelMessage)
{
UE_LOG (LogTemp, Warning, TEXT ( " Channel Message: %s " ), *ChannelMessage. Content );
}
void ANakamaActor::OnNotificationReceived ( const FNakamaNotificationList& Notifications)
{
for ( auto NotificationData : Notifications. Notifications )
{
UE_LOG (LogTemp, Warning, TEXT ( " Notification: %s " ), *NotificationData. Content );
}
}NakamaBlueprintsفي هذا القسم ، ستتعلم كيفية إنشاء وإدارة عملاء Nakama يدويًا الذين يتم توفيرهم بواسطة هذا المكون الإضافي ، بالكامل في المخططات.
الأمر متروك لك مكان إنشاء وتخزين الإشارات إلى العملاء ، ويمكن القيام بذلك في أي ممثل أو مكون أو شخصية أو gameMode وما إلى ذلك. مكان جيد لوضع العملاء في وحدة تحكم المشغل أو مثيل اللعبة.
ابدأ بإضافة عقدة إنشاء العميل الافتراضية والتي تعد جزءًا من مكتبة Nakama.

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

أنت الآن مستعد للمصادقة ، باستخدام أحد أنواع مصادقة Nakama المتوفرة العديدة ، في هذا المثال ، سنقوم بالتوثيق مع البريد الإلكتروني وكلمة المرور ، وعادة ما تقوم بإعداد مخطط عنصر واجهة المستخدم وتمرير المدخلات من واجهة المستخدم إلى عقدة المصادقة ، والمصادقة عن طريق الضغط على زر تسجيل الدخول.

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

بعد إنشاء عميل افتراضي ، ستتمكن من إعداد واحد أو أكثر من العملاء في الوقت الفعلي (مآخذ) يتفاعل مع الخادم.
اسحب من Nakamaclient التي قمت بإنشائها مسبقًا ، واتصل بوظيفة Setup Realtime Client .

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

بعد إنشاء عميل الوقت الحقيقي ، تكون مستعدًا لربط أحداثه

بعد إعداد مستمعيك المحددين ، تكون مستعدًا لربط عمليات الاسترجاعات.

إنشاء حدث مخصص ومنحه اسمًا ذا معنى.

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

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

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

هناك أيضًا بعض طرق إدارة الجلسة الإضافية مثل استعادة الجلسة والتحقق مما إذا كانت الجلسة قد انتهت صلاحيتها

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

يمكن استخدام عقدة RPC لتشغيل وظائف محددة على الخادم ، يجب أن تكون الحمولة بتنسيق JSON.

للمضي قدمًا ، يجب أن تكون مستعدًا لاستخدام جميع وظائف Nakama لتشغيل اللعبة أو التطبيق المدمج للمحرك غير المريح الرائع ، الذي يتم في مخططات تمامًا. يرجى الرجوع إلى الوثائق الرسمية على https://heroiclabs.com/docs على الرغم من أن بعض الوثائق موصوفة في C ++ تنطبق نفس الوظيفة الأساسية على تنفيذ المخطط.
يتم استخدام المؤشرات لإضافة وظائف الترحيل إلى بعض العقد ، مثل قائمة الأصدقاء وسجلات المتصدرين. عندما يكون هناك المزيد من البيانات التي يتم استردادها ، سيتم إرجاع سلسلة المؤشر في رد الاتصال الناجح. يمكنك تخزين هذا المؤشر كسلسلة واستخدامها لاحقًا ، مثل عندما ينقر الشخص على زر "أكثر" أو استخدامه على الفور لجلب المزيد من البيانات. انظر إلى المثال أدناه.

بشكل افتراضي ، يتم تعطيل التسجيل. ومع ذلك ، عند إنشاء عميل ، لديك خيار Enable Debug ، والسماح بكتابة السجلات باستخدام فئة سجل التصحيح. يمكنك أيضًا التحكم يدويًا في التسجيل.
تمكين التسجيل من المخططات: 
تمكين التسجيل من C ++
لتمكين التسجيل من خلال C ++ ، قم بتضمين ملف الرأس التالي:
# include " NakamaLogger.h "بعد ذلك ، لتبديل التسجيل ، استخدم:
UNakamaLogger::EnableLogging ( true );لتعيين مستوى السجل ، استخدم:
UNakamaLogger::SetLogLevel (ENakamaLogLevel::Debug);فئات السجل هي كما يلي:
Debug يكتب جميع السجلات.
تكتب Info سجلات مع Info Warn Error ومستوى التسجيل Fatal .
Warn يكتب سجلات مع Warn ، Error ومستوى قطع الأشجار Fatal .
Error يكتب سجلات مع Error ومستوى تسجيل Fatal .
يكتب Fatal سجلات فقط بمستوى قطع الأشجار Fatal .
يتضمن هذا المستودع اختبارًا للاختبار لاختبار الميزات المختلفة لـ Nakama for Unreal ، يمكن إجراء الاختبارات في المحرر ، من خط الأوامر ، وهناك حواء مشروع BlueprintsTest مع وثائق منفصلة إذا كنت ترغب في إجراء نفس الاختبارات في المخططات.
Nakama إلى دليل Plugins داخل المشروعFunctional Testing Editor في Unreal Onder Edit -> Plugins ثم أعد تشغيل المحررTool -> TestAutomationStart Tests
يمكن إجراء الاختبارات في كل من المعبأة واستخدام إصدار سطر الأوامر من محرر Unreal.
بالنسبة لجميع الاختبارات القائمة على خط الأوامر ، تبدأ عن طريق القيام بهذه الخطوات:
Nakama في دليل Plugins داخل المشروعNakama للمشروعWindows - محرر:
لبناء الاختبار ، قم بتشغيل:
" <Path_To_Unreal_Engine>EngineBuildBatchFilesBuild.bat " < YourProjectName > Editor Win64 Development -Project= " <Path_To_Your_Project><YourProjectName>.uproject "لتشغيل الاختبار ، قم بتشغيل:
" <Path_To_Unreal_Engine>EngineBinariesWin64UnrealEditor-Cmd.exe " " <Path_To_Your_Project><YourProjectName>.uproject " -ExecCmds= " Automation RunTests <YourTestName> " -log -NullRHI -verbose -unattended -ReportOutputPath= " <Path_To_Store_Report> " إذا كنت ترغب في تشغيل جميع الاختبارات استبدال <YourTestName> بـ Nakama.Base ، إذا قمت بتحديد ReportOutputPath فستتلقى نظرة عامة على سجل JSON ، وسيتم تخزين سجلات ضمن دليل Saved/Logs .
Windows - معبأة:
لبناء الاختبار ، قم بتشغيل:
" <Path_To_Unreal_Engine>/Engine/Build/BatchFiles/RunUAT.sh " BuildCookRun -targetconfig=Debug -project= " <Path_To_Your_Project><YourProjectName>.uproject " -noP4 -installed -utf8output -build -cook -stage -package -verbose -stdout -nohostplatform -useshellexecuteلتشغيل الاختبار ، قم بتشغيل:
./ < YourProjectName > /Saved/StagedBuilds/Windows/ < YourProjectName > .exe -nullrhi -verbose -ExecCmds= " Automation RunTests Nakama.Base " -logMac - تعبئتها:
لبناء الاختبار ، قم بتشغيل:
" <Path_To_Unreal_Engine>/Engine/Build/BatchFiles/RunUAT.sh " BuildCookRun -project= " <Path_To_Your_Project><YourProjectName>.uproject " -targetConfig=Debug -noP4 -platform=Mac -Architecture_Mac=arm64 -targetconfig=Debug -installed -unrealexe=UnrealEditor -utf8output -build -cook -stage -package -verboseلتشغيل الاختبار ، قم بتشغيل:
./ < YourProjectName > /Binaries/Mac/ < YourProjectName > .app/Contents/MacOS/ < YourProjectName > -nullrhi -stdout -forcelogflush -ExecCmds= " Automation RunTests Nakama.Base " -logLinux - معبأة:
لبناء الاختبار ، قم بتشغيل:
" <Path_To_Unreal_Engine>/Engine/Build/BatchFiles/RunUAT.sh " BuildCookRun -project= " <Path_To_Your_Project><YourProjectName>.uproject " -clientconfig=Test -noP4 -platform=Linux -targetconfig=Debug -installed -utf8output -build -cook -stage -package -verboseلتشغيل الاختبار ، قم بتشغيل:
./ < YourProjectName > /Binaries/Linux/ < YourProjectName > -nullrhi -stdout -forcelogflush -ExecCmds= " Automation RunTests Nakama.Base " -logتمرير المعلمات
يمكن تمرير المعلمات مثل اسم المضيف والمنفذ ومفتاح الخادم كوسيط لسطر الأوامر ، إليك مثال:
-hostname= " 127.0.0.1 " -port=7350 -serverkey= " defaultkey " -serverhttpkey= " defaulthttpkey " -timeout=45 -useSSLتعتمد بعض ميزات هذا البرنامج المساعد على JSON ، مثل إرسال رسائل الدردشة وتخزين البيانات باستخدام كائنات التخزين. لذلك يوصى بأن تستخدم مخططات بحتة ، فستجد مكونًا إضافيًا يمكنه إنشاء سلاسل JSON وتحليلها مثل Varest.
عندما تتطور داخل المحرر ، يمكنك تشغيل مثيلات متعددة غير واقعية باستخدام PIE (تشغيل في المحرر) وتكون قادرة على المصادقة باستخدام حسابات منفصلة ، وهي مفيدة للغاية عند اختبار وظائف تتطلب العديد من لاعبين ، مثل الدردشة ، متعددة الوقت في الواقع ، صناعة التوفيق وما إلى ذلك.
في جزء التثبيت من هذا الوثائق ، نضيف C ++ إلى مشروعنا ، وهذا فقط لتكون قادرًا على تجميع المكون الإضافي ، لا يزال بإمكانك استخدام المخططات فقط.
يتم توفيره مع هذا البرنامج المساعد هو مثال تم تطويره في مخططات خالصة تعرض جميع ميزات Nakama الأساسية تقريبًا.



تتم إدارة خريطة طريق التطوير حيث يتم الترحيب بقضايا github وطلبات السحب. إذا كنت مهتمًا بتعزيز الكود ، فيرجى فتح مشكلة لمناقشة التغييرات أو الاطلاع عليها ومناقشتها في منتدى المجتمع.
تعتمد الوحدة النمطية غير الواقعية على General C ++ SDK
نحن نستخدم VCPKG لتثبيت Nakama-SDK لأي أدوات معينة قبل وضعها في دليل NakamaCore/libnakama :
ARM64-OSX: vcpkg install --overlay-triplets=./triplets --host-triplet=arm64-osx-release-heroic --triplet=arm64-osx-release-heroic
X64-Windows: vcpkg install --overlay-triplets=./triplets --host-triplet=x64-windows-heroic --triplet=x64-windows-heroic
arm64-windows: vcpkg install --overlay-triplets=./triplets --host-triplet=arm64-windows-heroic --triplet=arm64-windows-heroic
X64-Linux: vcpkg install --overlay-triplets=./triplets --host-triplet=x64-linux-release-heroic --triplet=x64-linux-release-heroic
ثم انسخ المكتبة من VCPKG_INSTALLED إلى دليل LIBNAKAMA والرؤوس إلى NakamaCore/Public/nakama-cpp .
يمكنك بعد ذلك تجميع المكون الإضافي من سطر الأوامر ، مرفق العلامة -Rocket إذا كنت تتفوق على المحرر من خلال قاذفة ملحمية. ومع ذلك ، لا ينصح باستخدام توزيع قاذفة ملحمية على الأقل لتشغيل سطر الأوامر.
Windows:
${UNREAL_ENGINE} /Engine/Build/BatchFiles/RunUAT.sh BuildPlugin -NoHostPlatform -Plugin= " ${NAKAMA_UNREAL} /Nakama/Nakama.uplugin " -TargetPlatforms=Win64 -package= ${NAKAMA_UNREAL} /Out/Nakamaماك:
${UNREAL_ENGINE} /Engine/Build/BatchFiles/RunUAT.sh BuildPlugin -NoHostPlatform -Plugin= " ${NAKAMA_UNREAL} /Nakama/Nakama.uplugin " -TargetPlatforms=Mac -package= ${NAKAMA_UNREAL} /Out/Nakama -Architecture_Mac=arm64 لنظام التشغيل iOS ، تمرير iOS إلى TargetPlatforms .
لعرض القائمة الكاملة لأوامر التشغيل الآلي ، قم بتشغيل:
${UNREAL_ENGINE}/Engine/Build/BatchFiles/RunUAT.sh -List
لينكس:
${UNREAL_ENGINE}/Engine/Build/BatchFiles/RunUAT.sh BuildPlugin -NoHostPlatform -Plugin="${NAKAMA_UNREAL}/Nakama/Nakama.uplugin" -TargetPlatforms=Linux -package=${NAKAMA_UNREAL}/Out/Nakama
يمكنك العثور على دليل عميل Nakama Unreal هنا.
هذا المشروع مرخص بموجب ترخيص Apache-2.