Nakama adalah server open-source yang dirancang untuk menyalakan game dan aplikasi modern. Fitur termasuk akun pengguna, obrolan, sosial, mak comblang, multiplayer realtime, dan banyak lagi.
Klien ini mengimplementasikan opsi API dan soket lengkap dengan server. Ini ditulis dalam C ++ dengan dependensi minimal untuk mendukung Unreal 4 dan 5.
Jika Anda mengalami masalah apa pun dengan klien, akan berguna untuk mengaktifkan log debug dan membuka masalah.
Dokumentasi lengkap online - https://heroiclabs.com/docs
Plugin ini juga dapat digunakan untuk programmer yang menyukai C ++ atau cetak biru. Semua variabel dan fungsi terpapar jenis yang digunakan oleh Unreal Engine (Uproperties, Ustrukt, Ufunctions dll.)
Plugin dibagi menjadi tiga modul yang dapat ditarik tergantung pada kebutuhan Anda.
NakamaUnreal Modul berbasis C ++ yang direkomendasikan untuk menggunakan Nakama di UnrealEngine. Ini terintegrasi dengan tipe asli Unreal dan uobjects.NakamaBlueprints untuk pengguna yang lebih suka menggunakan cetak biru dalam proyek mereka.NakamaCore untuk pengguna yang bermigrasi dari Pre-V2.6.0 Unreal Client dan ingin membuat perubahan minimal, atau menggunakan API C ++ tingkat bawah kami tanpa jenis yang tidak nyata: (https://github.com/heroiclabs/nakama-cpp).Karena
NakamaCoremenggunakan perpustakaan prebuilt, Anda dapat mengalami masalah pembuatan karena perbedaan dalam toolchain Unreal dari toolchains C ++ standar. Inilah sebabnya mengapaNakamaUnrealadalah modul yang kami rekomendasikan.
Klien dirujuk dalam dokumentasi ini sebagai klien realtime dan klien default di mana klien realtime adalah soket dan klien default menggunakan REST API untuk berkomunikasi dengan Nakama.
Anda harus mengatur server dan database sebelum Anda dapat terhubung dengan klien. Cara paling sederhana adalah dengan menggunakan Docker tetapi melihat dokumentasi server untuk opsi lain.
Untuk mulai menggunakan Nakama di Unreal, Anda akan membutuhkan yang berikut:
Juga, harap pastikan proyek Unreal Anda adalah proyek C ++. Jika cetak biru saja, Anda dapat menambahkan file C ++ baru ke proyek Anda di Unreal Editor melalui "File -> kelas C ++ baru". Aturnya pribadi dan beri nama apa pun yang Anda suka. Memiliki file ini dalam proyek Anda memungkinkan Unreal mengkompilasi plugin.
Untuk menggunakan Nakama dalam proyek Unreal Anda, Anda harus mengunduh plugin kami dari Unreal Marketplace atau menyalin file nakama-unreal yang Anda unduh ke tempat yang sesuai. Untuk melakukan yang terakhir:
C:\MyUnrealProject\ ) di Explorer atau Finder.Plugins di sini.Nakama dari Nakama-Unreal dan masukkan ke dalam folder Plugins Secara opsional: Anda dapat meletakkan plugin di dalam folder plugin mesin Unreal Anda (misalnya, C:Program FilesEpic GamesUE_4.26EnginePluginsMarketplace ) untuk menggunakan plugin pada beberapa proyek.
Pada titik ini, Anda selesai. Restart Unreal. Setelah mengkompilasi sesuatu, buka edit-> plugin dan gulir ke bawah. Jika semuanya berjalan dengan baik, Anda akan melihat heroiclabs.nakama terdaftar sebagai plugin.
Klien
Anda harus memutuskan di mana Anda ingin membuat dan mencatat klien ini.
Sesi
Sesi adalah portabel uobjects yang berisi pointer sesi dan struct dengan data aktual dalam sesi, seperti token, data pengguna, informasi kedaluwarsa dan begitu. Ada juga beberapa fungsi utilitas yang disediakan dengan objek sesi, seperti mendapatkan variabel tertentu atau memulihkan sesi.
Sistem Centang
Biasanya Anda harus menangani detak berdasarkan C ++, untungnya ini dilakukan secara otomatis di bawah kap di plugin ini setelah Anda membuat klien. Saat Anda membuat klien, Anda dapat menentukan interval kutu, secara default ini diatur ke 0, yang berarti akan mencentang setiap bingkai, jika Anda ingin mencentang setiap 50ms Anda harus mengaturnya sebagai 0,05, untuk membuatnya centang setiap detik nomor ini akan 1.
Di bawah ini adalah contoh sederhana dari menyiapkan klien default, mengautentikasi, menyiapkan klien realtime dan bergabung dengan ruang obrolan. Dalam contoh kita akan meletakkan semuanya di kelas aaktor kosong yang ditempatkan di level.
Ingatlah untuk menambahkan nakamaunreal ke dependensi pribadi Anda di bawah file Project Build.cs Anda. Misalnya:
PrivateDependencyModuleNames . AddRange ( new string [ ] { "NakamaUnreal" } ) ;Dimulai dengan variabel publik header, kami menggunakan aktor kosong yang akan ditempatkan dalam adegan dalam contoh ini. Unreal Engine menggunakan sistem refleksi yang menyediakan metadata tentang kelasnya dan memungkinkan untuk fitur -fitur canggih seperti komunikasi Blueprint/C ++, serialisasi, dan banyak lagi. Saat bekerja dengan objek Nakama, atau kelas turunan uobject apa pun, penting untuk menandai mereka menggunakan sistem refleksi yang tidak nyata. Ini dilakukan dengan menggunakan makro seperti uFunction (), dan 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 ;Misalnya, jika Anda ingin objek Nakama tersedia untuk manipulasi dalam editor cetak biru, Anda akan menandainya dengan uproperty ().
UPROPERTY (BlueprintReadWrite, EditAnywhere, Category= " Nakama " )
UNakamaClient* NakamaClientInstance;Dengan menggunakan specifier BlueprintReadWrite, variabel NakamaClientInstance menjadi dapat dibaca dan dapat ditulakan dalam cetak biru.
Kemudian di dalam permainan begal kami mengatur klien default, mengotentikasi dan mengikat delegasi.
// 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);
}Kemudian respons panggilan balik otentikasi
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 ));
}Dan akhirnya panggilan balik pengaturan klien realtime yang ditimpa, Anda sekarang dapat menggunakan klien realtime.
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! " )));
}Jika Anda mengatur semuanya dengan benar, buat versi cetak biru dari aktor ini dan letakkan di level Anda akan melihat pesan di layar yang mengatakan bahwa Anda diautentikasi, nama pengguna Anda dan kemudian soket yang terhubung pesan.
Rilis Nakama Unreal terbaru menawarkan fleksibilitas untuk menggunakan Dynamic Multicast Delegates atau Lambdas (TFunctions) untuk menangani fungsi dan acara. Berikut perbandingan singkat dan pedoman tentang cara menggunakannya:
AddDynamic . Berikan tipe panggilan balik pilihan Anda (baik delegate atau lambda ) ke dalam parameter Success dan Error dari fungsi Nakama yang relevan.
Berikut adalah demonstrasi menggunakan lambdas sebagai alternatif untuk 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);Setelah menginisialisasi klien realtime Anda, penting untuk membangun pendengar acara untuk acara kritis dalam game, mulai dari pesan saluran dan pemberitahuan hingga interaksi partai. Nakama Unreal memberikan fleksibilitas dengan memungkinkan lambdas dan delegasi untuk tujuan ini.
// 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 );Implementasi fungsi mungkin terlihat seperti ini:
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 );
}
}NakamaBlueprintsDi bagian ini Anda akan belajar cara membuat dan mengelola klien nakama secara manual yang disediakan oleh plugin ini, sepenuhnya dalam cetak biru.
Terserah Anda tempat untuk membuat dan menyimpan referensi ke klien, ini bisa dilakukan di aktor, komponen, karakter, gamemode apa pun, dll. Tempat yang baik untuk menempatkan klien ada di controller pemain atau instance game.
Mulailah dengan menambahkan simpul klien Buat Default yang merupakan bagian dari perpustakaan Nakama.

Ini adalah praktik yang baik untuk mempromosikan klien ke variabel sehingga Anda dapat mengakses tempat lain di grafik cetak biru Anda.

Anda sekarang siap untuk mengotentikasi, menggunakan salah satu dari banyak jenis otentikasi Nakama yang disediakan, dalam contoh ini kami akan mengautentikasi dengan email dan kata sandi, biasanya Anda akan mengatur cetak biru widget dan meneruskan input dari UI ke dalam node otentikasi, dan mengautentikasi dengan menekan tombol login.

Seperti yang Anda lihat, ini mengembalikan objek sesi yang akan diteruskan ke fungsi lain, pastikan untuk mempromosikan objek sesi untuk digunakan nanti. Dengan plugin ini Anda mungkin memiliki beberapa sesi per instance yang tidak nyata, terserah Anda untuk tetap merekam dan memutuskan bagaimana Anda ingin menggunakan sesi tersebut. PIN Variabel juga perlu dihubungkan, tetapi Anda dapat membiarkan peta string kosong jika Anda tidak ingin menggunakan variabel khusus.

Setelah Anda membuat klien default, Anda dapat mengatur satu atau lebih klien (soket) realtime yang berinteraksi dengan server.
Seret keluar dari nakamaclient yang Anda buat sebelumnya, dan hubungi fungsi klien Realtime Setup .

Ingatlah untuk memberikan sesi pengguna dari otentikasi yang berhasil sebelumnya, kemudian mengikat acara khusus untuk panggilan balik keberhasilan dan kesalahan. Klien Realtime akan dikembalikan dari node ini, dan siap digunakan untuk berkomunikasi dengan server Nakama. Anda sekarang dapat menggunakan fitur seperti obrolan dan mak comblang.

Setelah membuat klien realtime Anda, Anda siap untuk mengikat ke 'acara

Setelah menyiapkan pendengar spesifik Anda, Anda siap untuk mengikat callbacks.

Buat acara khusus dan beri nama yang bermakna.

Dalam contoh di bawah ini, kami menyiapkan pendengar untuk pemberitahuan, maka kami mengikat acara tersebut, mengulangi pemberitahuan dan mencetaknya sebagai string debug di layar.

Dalam contoh berikutnya kami mendengarkan acara Matchmaker yang cocok kemudian mengikatnya dan menangani respons dengan bergabung dengan pertandingan dengan token yang dikembalikan yang kemudian mengembalikan kecocokan termasuk ID pertandingan, kehadiran, label, dan sebagainya.

Seperti yang dijelaskan sebelumnya, ketika Anda mengotentikasi dengan Nakama, Anda akan menerima objek sesi yang harus Anda simpan di suatu tempat yang mudah diakses dalam cetak biru Anda, karena banyak node di plugin ini memerlukan objek sesi sebagai input untuk berfungsi.
Objek sesi berisi referensi sesi aktual dan juga struktur dengan data yang dapat dibaca dalam cetak biru. Seret keluar dari sesi dan dapatkan data sesi.

Ada juga beberapa metode manajemen sesi tambahan seperti memulihkan sesi dan memeriksa apakah sesi telah kedaluwarsa

Disarankan untuk menyimpan token auth dari sesi dan memeriksa saat startup jika telah kedaluwarsa. Jika token telah kedaluwarsa, Anda harus reutentikasi. Waktu kedaluwarsa token dapat diubah sebagai pengaturan di server.
Klien menyertakan banyak API builtin untuk berbagai fitur server game. Ini dapat diakses dengan metode async, yang mengembalikan callback keberhasilan dan kesalahan. Mereka juga dapat memanggil logika khusus sebagai fungsi RPC di server. Semua permintaan dikirim dengan objek sesi yang memberi wewenang kepada klien.

Node RPC dapat digunakan untuk menjalankan fungsionalitas tertentu di server, muatan harus dalam format JSON.

Bergerak maju, Anda harus siap menggunakan semua fungsionalitas Nakama untuk memberi daya pada game atau aplikasi yang dibangun dengan mesin unreal Anda, dilakukan sepenuhnya dalam cetak biru. Silakan merujuk ke dokumentasi resmi di https://heroiclabs.com/docs meskipun beberapa dokumentasi dijelaskan dalam C ++ fungsionalitas inti yang sama berlaku untuk implementasi cetak biru.
Kursor digunakan untuk menambahkan fungsionalitas paging ke node tertentu, seperti daftar teman dan catatan papan peringkat. Ketika ada lebih banyak data yang harus diambil, string kursor akan dikembalikan dalam panggilan balik keberhasilan. Anda dapat menyimpan kursor ini sebagai string dan menggunakannya nanti, seperti ketika seseorang mengklik tombol "lebih banyak" atau menggunakannya segera untuk mengambil lebih banyak data. Lihatlah contoh di bawah ini.

Secara default, logging dinonaktifkan. Namun, saat membuat klien, Anda memiliki opsi untuk Enable Debug , memungkinkan log ditulis menggunakan kategori log debug. Anda juga dapat mengontrol logging secara manual.
Mengaktifkan logging dari cetak biru: 
Mengaktifkan logging dari C ++
Untuk mengaktifkan penebangan melalui C ++, sertakan file header berikut:
# include " NakamaLogger.h "Selanjutnya, untuk beralih penebangan, menggunakan:
UNakamaLogger::EnableLogging ( true );Untuk mengatur level log, gunakan:
UNakamaLogger::SetLogLevel (ENakamaLogLevel::Debug);Kategori log adalah sebagai berikut:
Debug menulis semua log.
Info menulis log dengan Info , Warn , Error dan tingkat logging Fatal .
Warn menulis log dengan Warn , Error dan tingkat logging Fatal .
Error menulis log dengan Error dan tingkat logging Fatal .
Fatal hanya menulis log dengan tingkat logging Fatal .
Repositori ini mencakup uji-suite untuk menguji berbagai fitur Nakama untuk Unreal, tes dapat dijalankan di editor, dari baris perintah dan ada proyek BlueprintsTest dengan dokumentasi terpisah jika Anda ingin menjalankan tes yang sama dalam cetak biru.
Nakama ke Direktori Plugins dalam ProyekFunctional Testing Editor di Unreal di bawah Edit -> Plugins kemudian restart editorTool -> TestAutomationStart Tests
Tes dapat dijalankan dalam kemasan dan menggunakan versi baris perintah dari Unreal Editor.
Untuk semua tes berbasis baris perintah dimulai dengan melakukan langkah-langkah ini:
Nakama di direktori Plugins di dalam proyekNakama untuk proyek tersebutWindows - Editor:
Untuk membangun tes, jalankan:
" <Path_To_Unreal_Engine>EngineBuildBatchFilesBuild.bat " < YourProjectName > Editor Win64 Development -Project= " <Path_To_Your_Project><YourProjectName>.uproject "Untuk menjalankan tes, jalankan:
" <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> " Jika Anda ingin menjalankan semua tes, ganti <YourTestName> dengan Nakama.Base , jika Anda menentukan ReportOutputPath , Anda akan menerima ikhtisar JSON Logfile, log akan disimpan dalam direktori Saved/Logs .
Windows - dikemas:
Untuk membangun tes, jalankan:
" <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 -useshellexecuteUntuk menjalankan tes, jalankan:
./ < YourProjectName > /Saved/StagedBuilds/Windows/ < YourProjectName > .exe -nullrhi -verbose -ExecCmds= " Automation RunTests Nakama.Base " -logMac - dikemas:
Untuk membangun tes, jalankan:
" <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 -verboseUntuk menjalankan tes, jalankan:
./ < YourProjectName > /Binaries/Mac/ < YourProjectName > .app/Contents/MacOS/ < YourProjectName > -nullrhi -stdout -forcelogflush -ExecCmds= " Automation RunTests Nakama.Base " -logLinux - dikemas:
Untuk membangun tes, jalankan:
" <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 -verboseUntuk menjalankan tes, jalankan:
./ < YourProjectName > /Binaries/Linux/ < YourProjectName > -nullrhi -stdout -forcelogflush -ExecCmds= " Automation RunTests Nakama.Base " -logParameter yang lewat
Parameter seperti nama host, port dan kunci server dapat dilewati sebagai argumen baris perintah, berikut adalah contoh:
-hostname= " 127.0.0.1 " -port=7350 -serverkey= " defaultkey " -serverhttpkey= " defaulthttpkey " -timeout=45 -useSSLBeberapa fitur plugin ini bergantung pada JSON, seperti mengirim pesan obrolan dan menyimpan data menggunakan objek penyimpanan. Oleh karena itu disarankan bahwa jika Anda menggunakan cetak biru murni, Anda menemukan plugin yang dapat membangun dan menguraikan string JSON seperti Varest.
Saat Anda berkembang di dalam editor, Anda dapat menjalankan beberapa instance yang tidak nyata menggunakan PIE (Play in Editor) dan dapat mengotentikasi menggunakan akun terpisah, yang sangat berguna saat menguji fungsionalitas yang memerlukan banyak pemain, seperti obrolan, multiplayer realtime, perjodohan, dan sebagainya.
Di bagian instalasi dari dokumentasi ini kami menambahkan C ++ ke proyek kami, ini hanya untuk dapat mengkompilasi plugin, Anda masih dapat menggunakan cetak biru hanya.
Disediakan dengan plugin ini adalah contoh proyek yang dikembangkan dalam cetak biru murni yang menampilkan hampir semua fitur inti Nakama.



Peta jalan pengembangan dikelola sebagai masalah gitub dan permintaan tarik dipersilakan. Jika Anda tertarik untuk meningkatkan kode, buka masalah untuk membahas perubahan atau mampir dan diskusikan di Forum Komunitas.
Modul Unreal didasarkan pada C ++ SDK umum
Kami menggunakan VCPKG untuk menginstal Nakama-SDK untuk setiap toolchain yang diberikan sebelum menempatkannya di direktori 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
Kemudian salin perpustakaan dari vcpkg_installed ke direktori libnakama dan header ke NakamaCore/Public/nakama-cpp .
Anda kemudian dapat mengkompilasi plugin dari baris perintah, melewati bendera -Rocket jika Anda melintasi editor melalui peluncur epik. Namun, menggunakan distribusi peluncur epik tidak disarankan setidaknya untuk menjalankan baris perintah.
Windows:
${UNREAL_ENGINE} /Engine/Build/BatchFiles/RunUAT.sh BuildPlugin -NoHostPlatform -Plugin= " ${NAKAMA_UNREAL} /Nakama/Nakama.uplugin " -TargetPlatforms=Win64 -package= ${NAKAMA_UNREAL} /Out/NakamaMac:
${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 Untuk iOS, lewati iOS ke TargetPlatforms .
Untuk melihat daftar lengkap perintah otomatisasi, jalankan:
${UNREAL_ENGINE}/Engine/Build/BatchFiles/RunUAT.sh -List
Linux:
${UNREAL_ENGINE}/Engine/Build/BatchFiles/RunUAT.sh BuildPlugin -NoHostPlatform -Plugin="${NAKAMA_UNREAL}/Nakama/Nakama.uplugin" -TargetPlatforms=Linux -package=${NAKAMA_UNREAL}/Out/Nakama
Anda dapat menemukan panduan klien Nakama Unreal di sini.
Proyek ini dilisensikan di bawah lisensi APACHE-2.