هذا هو UnityEngine MonorePository الذي يحتوي على مكتبات للوصول إلى خدمتين مختلفتين للواجهة الخلفية ، ناكاما و Satori.
تم بناء العملاء على عميل .NET مع امتدادات لمحرك الوحدة. أنها تتطلب تعيين إصدار وقت التشغيل .NET 4.6 في المحرر.
Nakama هو خادم مفتوح المصدر مصمم لتشغيل الألعاب والتطبيقات الحديثة. تتضمن الميزات حسابات المستخدمين ، والدردشة ، والاجتماعية ، وصانع الثقاب ، ومتعدد اللاعبين الحقيقيين ، وأكثر من ذلك بكثير.
الوثائق الكاملة على الإنترنت-https://heroiclabs.com/docs/unity-client-guide
ستحتاج إلى إعداد الخادم وقاعدة البيانات قبل أن تتمكن من الاتصال بالعميل. أبسط طريقة هي استخدام Docker ولكن إلقاء نظرة على وثائق الخادم لخيارات أخرى.
تثبيت وتشغيل الخوادم. اتبع هذه التعليمات.
تثبيت الوحدة SDK. لديك ثلاثة خيارات لهذا الغرض.
لاستخدام إصدار رسمي ، يمكنك تنزيل إما .UnityPackage أو .tar من صفحة الإصدارات واستيراده إلى مشروعك. إذا اخترت خيار .tar ، يمكنك استيراده من منسدلة في نافذة Manager Unity Package.
بدلاً من ذلك ، إذا كنت ترغب في الخروج من إصدار محدد أو التزام من Github واستخدام Unity 2019.4.1 أو لاحقًا ، يمكنك إضافة ما يلي إلى ملف manifest.json في مجلد Packages مشروعك:
"com.heroiclabs.nakama-unity" : " https://github.com/heroiclabs/nakama-unity.git?path=/Packages/Nakama#<commit | tag> "الخيار النهائي هو تنزيل الثنائيات التي تم تصميمها مسبقًا من متجر الأصول.
استخدم بيانات اعتماد الاتصال لإنشاء كائن عميل.
using Nakama ;
const string scheme = "http" ;
const string host = "127.0.0.1" ;
const int port = 7350 ;
const string serverKey = "defaultkey" ;
var client = new Client ( scheme , host , port , serverKey , UnityWebRequestAdapter . Instance ) ; يحتوي كائن العميل على العديد من الطرق لتنفيذ ميزات مختلفة في الخادم أو فتح اتصالات مقبس الوقت الحقيقي مع الخادم.
هناك مجموعة متنوعة من الطرق للمصادقة مع الخادم. يمكن للمصادقة إنشاء مستخدم إذا لم يكن موجودًا بالفعل مع بيانات الاعتماد هذه. من السهل أيضًا المصادقة مع ملف تعريف اجتماعي من Google Play Games و Facebook و Game Center وما إلى ذلك.
var deviceId = SystemInfo . deviceUniqueIdentifier ;
var session = await client . AuthenticateDeviceAsync ( deviceId ) ;
Debug . Log ( session ) ; عند مصادقة الخادم ، يستجيب الخادم برمز مصادقة (JWT) الذي يحتوي على خصائص مفيدة ويحصل على جاذبية في كائن Session .
Debug . Log ( session . AuthToken ) ; // raw JWT token
Debug . LogFormat ( "Session user id: '{0}'" , session . UserId ) ;
Debug . LogFormat ( "Session user username: '{0}'" , session . Username ) ;
Debug . LogFormat ( "Session has expired: {0}" , session . IsExpired ) ;
Debug . LogFormat ( "Session expires at: {0}" , session . ExpireTime ) ; // in seconds.يوصى بتخزين رمز المصادقة من الجلسة والتحقق من بدء التشغيل إذا انتهت صلاحيته. إذا انتهت صلاحية الرمز المميز. يمكن تغيير وقت انتهاء الصلاحية للرمز المميز كإعداد في الخادم.
const string prefKeyName = "nakama.session" ;
ISession session ;
var authToken = PlayerPrefs . GetString ( prefKeyName ) ;
if ( string . IsNullOrEmpty ( authToken ) || ( session = Session . Restore ( authToken ) ) . IsExpired )
{
Debug . Log ( "Session has expired. Must reauthenticate!" ) ;
} ;
Debug . Log ( session ) ;يتضمن العميل الكثير من واجهات برمجة التطبيقات المدمجة لمختلف ميزات خادم اللعبة. يمكن الوصول إليها مع أساليب Async. يمكن أيضًا استدعاء المنطق المخصص كوظائف RPC على الخادم. يمكن تنفيذ هذه أيضا مع كائن المقبس.
يتم إرسال جميع الطلبات باستخدام كائن جلسة يسمح للعميل.
var account = await client . GetAccountAsync ( session ) ;
Debug . LogFormat ( "User id: '{0}'" , account . User . Id ) ;
Debug . LogFormat ( "User username: '{0}'" , account . User . Username ) ;
Debug . LogFormat ( "Account virtual wallet: '{0}'" , account . Wallet ) ;يمكن توفير الطلبات بتكوينات إعادة المحاولة في حالات أخطاء الشبكة العابرة أو الخادم.
يمكن استخدام تكوين واحد للتحكم في جميع سلوك إعادة محاولة الطلب:
var retryConfiguration = new RetryConfiguration ( baseDelay : 1 , maxRetries : 5 , delegate { System . Console . Writeline ( "about to retry." ) ; } ) ;
client . GlobalRetryConfiguration = retryConfiguration ;
var account = await client . GetAccountAsync ( session ) ;أو ، يمكن توفير التكوين على أساس لكل مرجع:
var retryConfiguration = new RetryConfiguration ( baseDelay : 1 , maxRetries : 5 , delegate { System . Console . Writeline ( "about to retry." ) ; } ) ;
var account = await client . GetAccountAsync ( session , retryConfiguration ) ;تكوينات إعادة إعادة التكوينات لكل مسابقة تتجاوز تكوين إعادة المحاولة العالمية.
يمكن أيضًا تزويد الطلبات برمز الإلغاء إذا كنت بحاجة إلى إلغاءها في منتصف الرحلة:
var canceller = new CancellationTokenSource ( ) ;
var account = await client . GetAccountAsync ( session , retryConfiguration : null , canceller ) ;
await Task . Delay ( 25 ) ;
canceller . Cancel ( ) ; // will raise a TaskCanceledExceptionيمكن للعميل إنشاء مآخذ أو أكثر مع الخادم. يمكن أن يكون لكل مقبس مستمعي أحداث خاص به للاستجابات المستلمة من الخادم.
var socket = client . NewSocket ( ) ;
socket . Connected += ( ) => Debug . Log ( "Socket connected." ) ;
socket . Closed += ( ) => Debug . Log ( "Socket closed." ) ;
await socket . ConnectAsync ( session ) ; إذا كنت ترغب في تنفيذ معالجات المقبس لتنفيذ الخيط الرئيسي خارج الوحدة ، فالمرض في useMainThread: false :
var socket = client . NewSocket ( useMainThread : false ) ; يمكنك التقاط الأخطاء عند استخدامها await السقالات مع المهام في C#.
try
{
var account = await client . GetAccountAsync ( session ) ;
Debug . LogFormat ( "User id: '{0}'" , account . User . Id ) ;
}
catch ( ApiResponseException e )
{
Debug . LogFormat ( "{0}" , e ) ;
} يمكنك تجنب استخدام await حيث ستحتاج الاستثناءات إلى اكتشاف Task.ContinueWith(...) .
client . GetAccountAsync ( session ) . ContinueWith ( t =>
{
if ( t . IsFaulted || t . IsCanceled )
{
Debug . LogFormat ( "{0}" , t . Exception ) ;
return ;
}
var account = t . Result ;
Debug . LogFormat ( "User id: '{0}'" , account . User . Id ) ;
} ) ;Satori هو خادم LiveOps للألعاب التي تعمل على تشغيل التحليلات القابلة للتنفيذ ، واختبار A/B والتكوين البعيد. استخدم عميل Unity Satori للتجمع مع Satori من داخل لعبة الوحدة الخاصة بك.
الوثائق الكاملة على الإنترنت - https://heroiclabs.com/docs/satori/client-libraries/unity
قم بإنشاء كائن عميل يقبل واجهة برمجة التطبيقات التي تم منحها كعميل Satori.
using Satori ;
const string scheme = "https" ;
const string host = "127.0.0.1" ; // add your host here
const int port = 443 ;
const string apiKey = "apiKey" ; // add the api key that was given to you as a Satori customer.
var client = new Client ( scheme , host , port , apiKey ) ;ثم المصادقة مع الخادم للحصول على جلستك.
// Authenticate with the Satori server.
try
{
session = await client . AuthenticateAsync ( id ) ;
Debug . Log ( "Authenticated successfully." ) ;
}
catch ( ApiResponseException ex )
{
Debug . LogFormat ( "Error authenticating: {0}" , ex . Message ) ;
}باستخدام العميل ، يمكنك الحصول على أي تجارب أو أعلام الميزات ، ينتمي المستخدم إلى.
var experiments = await client . GetExperimentsAsync ( session ) ;
var flag = await client . GetFlagAsync ( session , "FlagName" ) ;يمكنك أيضًا إرسال أحداث تعسفية إلى الخادم:
await client . EventAsync ( session , new Event ( "gameLaunched" , DateTime . UtcNow ) ) ;هذه ليست سوى مجموعة فرعية من واجهة برمجة تطبيقات عميل Satori ، لذا يرجى الاطلاع على رابط الوثائق المدرج سابقًا في API الكامل.
بالنسبة لكل من بناء Nakama و Satori WebGL ، يجب عليك التأكد من أن IHttpAdapter المنقولة إلى العميل هو UnityWebRequestAdapter .
var client = new Client ( "defaultkey" , UnityWebRequestAdapter . Instance ) ; بالنسبة إلى Nakama ، استخدم طريقة تمديد NewSocket() لإنشاء المقبس أو تعيين ISocketAdapter الأيمن لكل منصة.
var socket = client . NewSocket ( ) ;
// or
#if UNITY_WEBGL && ! UNITY_EDITOR
ISocketAdapter adapter = new JsWebSocketAdapter ( ) ;
#else
ISocketAdapter adapter = new WebSocketAdapter ( ) ;
#endif
var socket = Socket . From ( client , adapter ) ;عند اختبار مثالنا على مشهد webgl قبل 2021.1 ، تأكد من الدخول في إعدادات الإنشاء وقم بتعيين تكوين برنامج التحويل البرمجي C ++ لإصداره بدلاً من التصحيح بسبب مشكلة معلقة في Unity WebGL: https://issuetracker.unity3d.com/issues/webgl-build-throws-threads-are-not-ed-ed-this-platform-error-when-programs-built-using-debug-c-plus-plus-plus-compiler-configuration
تتم إدارة خريطة طريق التطوير حيث يتم الترحيب بقضايا github وطلبات السحب. إذا كنت مهتمًا بتعزيز الكود ، فيرجى فتح مشكلة لمناقشة التغييرات أو الاطلاع عليها ومناقشتها في منتدى المجتمع.
يمكن فتح هذا المشروع في الوحدة لإنشاء ". UnityPackage".
هذا المشروع مرخص بموجب ترخيص Apache-2.