https://www.unrealengine.com/marketplace/ko/product/eos-online-subsystem
언리얼 엔진 EOS 플러그인으로 판매되고 있습니다.
https://gitlab.com/redpointgames/eos-online-subsystem-example/-/tree/main/ExampleCPP_EOS_4.26
깃랩에 예제 프로젝트도 공개되어 있습니다.
예제 프로젝트에 플러그인을 넣고 컴파일해 데모를 돌리면 모든 데이터를 잘 받아옵니다.
그러나 예제에 포함되지 않은 다른 제품의 키를 넣고 테스트하면 스탯과 리더보드 부분이 작동되지 않습니다.
그 이유는 이 예제가 모든 제품에 대해 대응하도록 설계되지 않고, 지정된 이름의 스탯으로만 동작하도록 설계되었기 때문인데요. 소스 코드를 수정해 BP대응을 추가적으로 해 주어야 합니다.
QueryStats, HandleLeaderboardResult 함수를 보시면 Score와 TestScore가 하드코딩으로 박혀있습니다. 파라미터를 받는 함수로 적절히 수정하여 사용하시면 됩니다.
코드 전문
더보기
// ExampleCPPSubsystem.h
UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"))
void QueryStatsByName(const UObject *WorldContextObject,
const FString &StatName, FExampleCPPSubsystemQueryStatsComplete OnDone);
UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"))
void QueryStatsByNames(const UObject *WorldContextObject,
const TArray<FString> &StatNames, FExampleCPPSubsystemQueryStatsComplete OnDone);
// ExampleCPPSubsystem.Stats.cpp
void UExampleCPPSubsystem::QueryStatsByName(const UObject *WorldContextObject,
const FString &StatName, FExampleCPPSubsystemQueryStatsComplete OnDone)
{
IOnlineSubsystem *Subsystem = Online::GetSubsystem(WorldContextObject->GetWorld());
if (Subsystem == nullptr)
{
OnDone.ExecuteIfBound(false, TArray<FExampleCPPStat>());
return;
}
IOnlineIdentityPtr Identity = Subsystem->GetIdentityInterface();
IOnlineStatsPtr Stats = Subsystem->GetStatsInterface();
TArray<TSharedRef<const FUniqueNetId>> Users;
Users.Add(Identity->GetUniquePlayerId(0).ToSharedRef());
TArray<FString> StatNames;
StatNames.Add(StatName);
Stats->QueryStats(
Identity->GetUniquePlayerId(0).ToSharedRef(),
Users,
StatNames,
FOnlineStatsQueryUsersStatsComplete::CreateUObject(
this,
&UExampleCPPSubsystem::HandleQueryStats,
WorldContextObject,
OnDone));
}
void UExampleCPPSubsystem::QueryStatsByNames(const UObject *WorldContextObject,
const TArray<FString> &StatNames, FExampleCPPSubsystemQueryStatsComplete OnDone)
{
IOnlineSubsystem *Subsystem = Online::GetSubsystem(WorldContextObject->GetWorld());
if (Subsystem == nullptr)
{
OnDone.ExecuteIfBound(false, TArray<FExampleCPPStat>());
return;
}
IOnlineIdentityPtr Identity = Subsystem->GetIdentityInterface();
IOnlineStatsPtr Stats = Subsystem->GetStatsInterface();
TArray<TSharedRef<const FUniqueNetId>> Users;
Users.Add(Identity->GetUniquePlayerId(0).ToSharedRef());
Stats->QueryStats(
Identity->GetUniquePlayerId(0).ToSharedRef(),
Users,
StatNames,
FOnlineStatsQueryUsersStatsComplete::CreateUObject(
this,
&UExampleCPPSubsystem::HandleQueryStats,
WorldContextObject,
OnDone));
}
'Unreal > 에픽 온라인 서비스' 카테고리의 다른 글
EOS: 인증 인터페이스에서 AuthScopeConsentRequired를 리턴할 때 (0) | 2021.12.07 |
---|---|
EOS: DevTool Authenticate 파라미터 (0) | 2021.12.05 |
EOS: RedPoint Games EpicOnlineSubsystem 플러그인 세팅하기 (0) | 2021.11.01 |
EOS: Epic Online Service 플러그인 (0) | 2021.10.18 |
EOS: 리더보드 예제 런타임 Assertion 에러 발생 (0) | 2021.10.12 |