Nakama는 현대적인 게임 및 앱에 전원을 공급하도록 설계된 오픈 소스 서버입니다. 기능에는 사용자 계정, 채팅, 소셜, 매치 메이커, 실시간 멀티 플레이어 등이 있습니다.
이 클라이언트는 서버와 함께 전체 API 및 소켓 옵션을 구현합니다. Unreal 4 및 5를 지원하기 위해 최소한의 종속성으로 C ++로 작성되었습니다.
클라이언트와의 문제가 발생하면 디버그 로그를 활성화하고 문제를 여는 것이 유용 할 수 있습니다.
전체 문서는 온라인으로 -https://heroiclabs.com/docs입니다
이 플러그인은 C ++ 또는 청사진을 좋아하는 프로그래머에게도 사용할 수 있습니다. 모든 변수와 함수는 Unreal Engine에서 사용하는 유형에 노출됩니다 (Uproperties, Ustruct, ufunctions 등).
플러그인은 필요에 따라 가져올 수있는 3 가지 모듈로 나뉩니다.
NakamaUnreal urealengine에서 Nakama를 사용하기위한 권장 C ++-기반 모듈. 이것은 Unreal의 기본 유형 및 uobjects와 통합됩니다.NakamaBlueprints .NakamaCore : (https://github.com/heroiclabs/nakama-cpp).
NakamaCore미리 빌드 라이브러리를 사용하기 때문에 표준 C ++ 도구 체인의 Unreal 도구 체인의 차이로 인해 빌드 문제가 발생할 수 있습니다. 이것이NakamaUnreal이 권장 모듈 인 이유입니다.
이 문서에서 클라이언트는 실시간 클라이언트 및 실시간 클라이언트 가 소켓이고 기본 클라이언트가 REST API를 사용하여 Nakama와 통신하는 기본 클라이언트라고합니다.
클라이언트와 연결하기 전에 서버 및 데이터베이스를 설정해야합니다. 가장 간단한 방법은 Docker를 사용하는 것이지만 다른 옵션에 대한 서버 문서를 살펴 보는 것입니다.
비현실적으로 나카마를 사용하기 위해서는 다음과 같은 것이 필요합니다.
또한 비현실적인 프로젝트가 C ++ 프로젝트인지 확인하십시오. Blueprint 만 있으면 "파일 -> New C ++ 클래스"를 통해 Unreal Editor의 프로젝트에 새 C ++ 파일을 추가 할 수 있습니다. 비공개로 설정하고 원하는대로 이름을 지정하십시오. 프로젝트 에이 파일을 사용하면 플러그인을 비현실적으로 컴파일 할 수 있습니다.
Unreal Project에서 Nakama를 사용하려면 Unreal Marketplace에서 플러그인을 다운로드하거나 다운로드 한 Nakama-Unreal 파일을 적절한 장소로 복사해야합니다. 후자를하기 위해 :
C:\MyUnrealProject\ )를 엽니 다.Plugins 폴더를 만듭니다.Nakama 폴더를 복사하여 Plugins 폴더에 넣으십시오. 선택적으로 : 플러그인을 비현실적인 엔진 플러그인 폴더 (예 : C:Program FilesEpic GamesUE_4.26EnginePluginsMarketplace ) 내에 넣을 수 있으려면 여러 프로젝트에서 플러그인을 사용 할 수 있습니다.
이 시점에서 당신은 끝났습니다. 비현실적으로 다시 시작하십시오. 물건을 컴파일 한 후에는 편집-> 플러그인을 열고 바닥으로 스크롤하십시오. 모든 것이 잘 진행되면, 당신은 Heroiclabs.nakama가 플러그인으로 나열되어 있어야합니다.
클라이언트
이 고객의 기록을 작성하고 유지하려는 위치를 결정해야합니다.
세션
세션은 토큰, 사용자 데이터, 만료 정보와 같은 세션의 실제 데이터가 포함 된 세션 포인터와 구조물이 포함 된 휴대용 UOBJECTS입니다. 특정 변수를 얻거나 세션을 복원하는 것과 같은 세션 객체와 함께 제공되는 유틸리티 기능도 있습니다.
진드기 시스템
일반적으로 C ++ 기준으로 진드기를 처리해야합니다. 운 좋게도 클라이언트를 생성 한 후이 플러그인의 후드 아래에서 자동으로 수행됩니다. 클라이언트를 생성 할 때 진드기 간격을 정의 할 수 있습니다. 기본적으로 이것은 0으로 설정됩니다. 즉, 모든 프레임을 진드기로 설정합니다. 즉, 50ms마다 진드기가 0.05로 설정 해야하는 경우 매 초마다 진드기를 만들려면이 숫자는 1이됩니다.
아래는 기본 클라이언트를 설정하고, 인증하고, 실시간 클라이언트를 설정하고, 채팅방에 가입하는 간단한 예입니다. 예에서 우리는 레벨에 배치 된 빈 Aactor 클래스에 모든 것을 넣을 것입니다.
Project Build.cs 파일에 따라 개인 의존성에 NakamaunReal을 추가하십시오. 예를 들어:
PrivateDependencyModuleNames . AddRange ( new string [ ] { "NakamaUnreal" } ) ;Headers Public 변수부터 시작 하여이 예제의 장면에 배치 될 빈 액터를 사용하고 있습니다. 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 ;예를 들어, Blueprint 편집기 내에서 Nakama 객체를 조작 할 수있게하려면 Uproperty ()로 표시됩니다.
UPROPERTY (BlueprintReadWrite, EditAnywhere, Category= " Nakama " )
UNakamaClient* NakamaClientInstance;Blueprintreadwrite 지정자를 사용함으로써 Nakamaclientinstance 변수는 청사진으로 읽기 쉽고 쓸 수있게됩니다.
그런 다음 시작 플레이에서 기본 클라이언트를 설정하고 인증 및 바인딩합니다.
// 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 Release는 기능 및 이벤트를 처리하기 위해 Dynamic Multicast Delegates 또는 Lambdas (TFunctions) 사용하는 유연성을 제공합니다. 다음은 사용 방법에 대한 간단한 비교 및 지침입니다.
AddDynamic 사용하여 바인딩. 선호하는 콜백 유형 ( delegate 또는 lambda )을 관련 나카마 함수의 Success 및 Error 매개 변수에 제공하십시오.
다음은 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 클라이언트를 수동으로 수동으로 작성하고 관리하는 방법을 배웁니다.
클라이언트에 대한 참조를 작성하고 저장하는 곳에 달려 있으며, 모든 액터, 구성 요소, 캐릭터, 게임 모드 등에서 수행 할 수 있습니다. 클라이언트를 배치하기에 좋은 장소는 플레이어 컨트롤러 또는 게임 인스턴스에 있습니다.
Nakama 라이브러리의 일부인 Create Default 클라이언트 노드를 추가하여 시작하십시오.

청사진 그래프의 다른 장소에 액세스 할 수 있도록 고객을 변수로 홍보하는 것이 좋습니다.

이제 제공되는 많은 Nakama 인증 유형 중 하나를 사용하여 인증 할 준비가되어 있습니다.이 예에서는 이메일 및 비밀번호로 인증됩니다. 일반적으로 위젯 청사진을 설정하고 UI의 입력을 인증 노드로 전달하고 로그인 버튼을 누르면 인증합니다.

보시다시피, 이것은 다른 함수로 전달되는 세션 객체를 반환하고 나중에 사용하기 위해 세션 객체를 홍보하십시오. 이 플러그인을 사용하면 Unreal 인스턴스 당 여러 세션이있을 수 있습니다. 기록을 유지하고 세션을 사용하는 방법을 결정하는 것은 귀하에게 달려 있습니다. 변수 핀도 연결해야하지만 사용자 정의 변수를 사용하지 않으려면 문자열 맵을 비워 둘 수 있습니다.

기본 클라이언트를 생성 한 후에는 서버와 상호 작용하는 하나 이상의 실시간 클라이언트 (소켓)를 설정할 수 있습니다.
이전에 만든 Nakamaclient 에서 끌어 내고 설정 실시간 클라이언트 기능을 호출하십시오.

성공적인 인증에서 사용자 세션을 조기에 제공 한 다음 사용자 정의 이벤트를 성공 및 오류 콜백에 바인딩해야합니다. 실시간 클라이언트는이 노드에서 반환되며 Nakama 서버와 통신 할 준비가되었습니다. 이제 채팅 및 매치 메이커와 같은 기능을 사용할 수 있습니다.

실시간 클라이언트를 만든 후에는 '이벤트에 바인딩 할 준비가되었습니다.

특정 청취자를 설정 한 후 콜백에 바인딩 할 준비가되었습니다.

사용자 정의 이벤트를 만들고 의미있는 이름을 부여하십시오.

아래의 예에서는 알림에 대한 리스너를 설정 한 다음 이벤트에 바인딩하고 알림을 고치고 화면에서 디버그 문자열로 인쇄합니다.

다음 예제에서 우리는 MatchMaker Matched 이벤트를 듣고 반환 된 토큰과 일치하는 다음 매치 ID, 선물, 레이블 등을 포함한 경기를 반환하여 응답을 처리합니다.

앞에서 설명한대로, 나카마로 인증하면이 플러그인의 많은 노드에는 세션 객체를 기능으로 입력해야하기 때문에 Blueprints에 쉽게 액세스 할 수있는 곳에 보관 해야하는 세션 객체를받을 수 있습니다.
세션 객체에는 실제 세션 참조와 청사진으로 읽을 수있는 데이터가 포함 된 구조가 포함되어 있습니다. 세션에서 드래그하고 세션 데이터를 가져옵니다.

세션 복원 및 세션이 만료되었는지 확인하는 것과 같은 추가 세션 관리 방법도 있습니다.

세션에서 인증 토큰을 저장하고 만료 된 경우 시작시 확인하는 것이 좋습니다. 토큰이 만료되면 다시 인증해야합니다. 토큰의 만료 시간은 서버의 설정으로 변경 될 수 있습니다.
클라이언트에는 게임 서버의 다양한 기능을위한 많은 내장 API가 포함되어 있습니다. 이들은 성공 및 오류 콜백을 반환하는 비동기 방법으로 액세스 할 수 있습니다. 또한 서버에서 RPC 기능으로 사용자 정의 로직을 호출 할 수도 있습니다. 모든 요청에는 클라이언트를 승인하는 세션 객체와 함께 전송됩니다.

RPC 노드는 서버에서 특정 기능을 실행하는 데 사용될 수 있으며 페이로드는 JSON 형식이어야합니다.

앞으로, 당신은 나카마의 모든 기능을 사용하여 훌륭한 실현 된 엔진 제작 게임 또는 앱을 전적으로 청사진으로 수행 할 준비가되어 있어야합니다. 문서 중 일부가 C ++에 설명되어 있더라도 https://heroiclabs.com/docs의 공식 문서를 참조하십시오.
커서는 친구 목록 및 리더 보드 레코드와 같은 특정 노드에 페이징 기능을 추가하는 데 사용됩니다. 검색 할 데이터가 더 많으면 성공 콜백에서 커서 문자열이 반환됩니다. 이 커서를 문자열로 저장하고 사람이 "더 많은"버튼을 클릭하거나 즉시 사용하여 더 많은 데이터를 가져 오는 것처럼 나중에 사용할 수 있습니다. 아래 예를보십시오.

기본적으로 로깅이 비활성화됩니다. 그러나 클라이언트를 만들 때 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의 다양한 기능을 비현실적으로 테스트하는 테스트 스위트가 포함되어 있으며, 사령부에서 편집기에서 테스트를 실행할 수 있으며 Blueprints에서 동일한 테스트를 실행하려면 별도의 문서가있는 BlueprintsTest 프로젝트가 있습니다.
Plugins 디렉토리에 Nakama 플러그인을 추가하십시오Edit -> Plugins 에서 Functional Testing Editor 플러그인을 활성화 한 다음 편집기를 다시 시작하십시오.Tool -> TestAutomation 으로 이동하십시오Start Tests 클릭하십시오.
테스트는 포장 및 Unreal Editor의 명령 줄 버전을 사용하여 실행할 수 있습니다.
모든 명령 줄 기반 테스트의 경우 다음 단계를 수행하여 시작합니다.
Plugins 디렉토리에 Nakama 플러그인을 배치하십시오.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 LOGFILE을 받으면 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에 따라 다릅니다. 따라서 순수한 청사진을 사용하는 경우 varest와 같은 JSON 문자열을 구성하고 구문 분석 할 수있는 플러그인을 찾는 것이 좋습니다.
편집기 내에서 개발할 때 Pie (편집기에서 재생)를 사용하여 여러 비현실적인 인스턴스를 실행할 수 있으며 별도의 계정을 사용하여 인증 할 수 있습니다. 이는 별도의 계정을 사용하여 채팅, 실시간 멀티 플레이어, 매치 메이킹 등 여러 플레이어가 필요한 기능을 테스트 할 때 매우 유용합니다.
이 문서의 설치 부분에서 우리는 프로젝트에 C ++를 추가하므로 플러그인을 컴파일 할 수 있으며 여전히 청사진 만 사용할 수 있습니다.
이 플러그인은 거의 모든 나카마 코어 기능을 보여주는 순수한 청사진으로 개발 된 예제 프로젝트입니다.



개발 로드맵은 GitHub 문제로 관리되며 풀 요청을 환영합니다. 코드 향상에 관심이 있으시면 변경 사항을 논의하거나 Community Forum에서 논의하고 논의하는 문제를 열어주십시오.
비현실적인 모듈은 일반적인 C ++ SDK를 기반으로합니다
우리는 VCPKG를 사용하여 NakamaCore/libnakama 디렉토리에 배치하기 전에 주어진 툴체인에 Nakama-SDK를 설치합니다.
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
그런 다음 Libnakama 디렉토리에 설치된 VCPKG_INSTALLED에서 라이브러리를 복사하고 헤더를 NakamaCore/Public/nakama-cpp 로 복사하십시오.
그런 다음 명령 줄에서 플러그인을 컴파일하여 Epic Launcher를 통해 편집기를 강화하면 -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
Linux :
${UNREAL_ENGINE}/Engine/Build/BatchFiles/RunUAT.sh BuildPlugin -NoHostPlatform -Plugin="${NAKAMA_UNREAL}/Nakama/Nakama.uplugin" -TargetPlatforms=Linux -package=${NAKAMA_UNREAL}/Out/Nakama
Nakama Unreal Client Guide는 여기에서 찾을 수 있습니다.
이 프로젝트는 Apache-2 라이센스에 따라 라이센스가 부여됩니다.