빠른 시작: PlayFab 온라인 하위 시스템(OSS)
이 빠른 시작 가이드는 Unreal Engine 4 또는 Unreal Engine 5를 사용하여 제작된 Xbox, PC, Nintendo Switch, PlayStation®5 및 PlayStation®4 게임용 로비, 매치 메이킹 및 파티와 같은 멀티플레이어 기능을 설정하고 사용하는 데 도움이 됩니다. UE4 또는 UE5에서 지원되는 플랫폼 및 버전의 전체 목록은 지원되는 플랫폼을 참조하세요.
대상 플랫폼에 대해 이 페이지에 설명된 관련 단계를 수행하면 OSS 사용을 시작할 준비가 된 것입니다. 인증, 네트워킹, VOIP, 로비로 그룹화, 매치 메이킹에는 다른 변경 사항이 필요 없으며, 사용자를 대신해 처리됩니다.
PlayFab 온라인 하위 시스템 다운로드 및 설치
PlayFab 온라인 하위 시스템으로 이동하여 PlayFab 온라인 하위 시스템 소스를 다운로드하거나 복제합니다. 다운로드 또는 복제된 리포지토리 이름은 PlayFabMultiplayerUnreal입니다. 리포지토리 이름을 OnlineSubsystemPlayFab으로 변경해야 합니다.
필요한 항목
- PlayFab 타이틀 ID: PlayFab 파티 및 멀티플레이어 SDK에 대해 구성된 타이틀 ID가 없는 경우 PlayFab 파티 활성화를 참조하세요.
GDK, PC, 스위치, PlayStation®5 및 PlayStation®4
- 특정 플랫폼 PlayFab 파티 및 로비 및 매치메이킹 라이브러리:PlayFab 파티 및 멀티플레이어 라이브러리 얻기를 참조하세요.
초기 설정
Unreal Engine 코드 베이스
- OnlineSubsystemPlayFab 폴더와 내용을 Engine\Plugins\Online 아래의 UE 디렉터리에 복사합니다.
- GenerateProjectFiles.bat를 실행하여 엔진에 대한 프로젝트 파일을 만듭니다.
- 새 UE5.sln 파일을 두 번 클릭하여 Visual Studio에 프로젝트를 로드합니다.
- 솔루션 구성을 개발 편집기로 설정하고 솔루션 플랫폼을 Win64로 설정한 다음 UE5 대상을 마우스 오른쪽 단추로 클릭하고 빌드를 선택합니다.
게임 코드 베이스
-
.uproject 파일의 플러그인 섹션에 다음 변경 내용을 적용하여 플러그인 목록에 OnlineSubsystemPlayFab를 추가합니다.
- 배송하지 않는 플랫폼을 제거할 수 있습니다.
- UE5는 XboxOneGDK를 더 이상 사용하지 않으므로 UE4를 사용하는 경우 XB1 대신 XboxOneGDK를 사용하세요.
{
"Name": "OnlineSubsystemPlayFab",
"Enabled": true,
"WhitelistPlatforms": [
"XB1",
"WinGDK",
"XSX",
"Win64",
"Switch",
"PS4",
"PS5"
],
"SupportedTargetPlatforms": [
"XB1",
"WinGDK",
"XSX",
"Win64",
"Switch",
"PS4",
"PS5"
]
}
- .uproject 파일을 마우스 오른쪽 단추로 클릭하고 위의 Unreal Engine 코드 경로로 'Unreal Engine 버전 전환'을 선택하여 게임 솔루션 파일을 생성합니다.
게임 구성
- 대상으로 하는 플랫폼에 관계없이 게임은 의도한 플랫폼 대상의 INI 파일([yourGameDirectory]/Platforms/[yourPlatform]/Config에 있음)에서 특정 PlayFab 특정 값을 구성해야 합니다.
- Xbox Series X GDK: XSXEngine.ini
- PC GDK: WinGDKEngine.ini
- Xbox One GDK: XB1Engine.ini(또는 UE4를 사용하는 경우 XboxOneGDKEngine.ini)
- PC Steam: WindowsEngine.ini(또는 [yourGameDirectory]/Config/Windows에서 찾음)
- Nintendo Switch SwitchEngine.ini
- PS4™ PS4Engine.ini
- PS5™ PS5Engine.ini
- 구성의 INI 섹션이 이미 존재하는 경우(예: Engine.GameEngine) 다음 섹션에 제시된 섹션으로 교체합니다.
- 모든 <REPLACE ME> 입력란을 데이터로 교체해야 합니다.
[OnlineSubsystemPlayFab]
bEnabled=true
PlayFabTitleID=<REPLACE ME with your PlayFab title ID>
MaxDeviceCount=<REPLACE ME with your max player count (note: split screen is still 1 device). In the example of an 8 player game, this would be 8.>
MaxDevicesPerUserCount=<REPLACE ME with your max player count per box (note: split screen is still 1 device) In the example of an 8 player game, this would be 1.>
MaxEndpointsPerDeviceCount=<REPLACE ME with your max player count per box (note: split screen is still 1 device) In the example of an 8 player game, this would be 1.>
MaxUserCount=<REPLACE ME with your max player count (note: split screen is still 1 device) In the example of an 8 player game, this would be 8.>
MaxUsersPerDeviceCount=<REPLACE ME with your max player count per box (note: split screen is still 1 device) In the example of an 8 player game, this would be 1.>
DirectPeerConnectivityOptions=<REPLACE ME with your connectivity options, in the form of an array of strings. The default case corresponds to the following:
+DirectPeerConnectivityOptions=AnyPlatformType
+DirectPeerConnectivityOptions=AnyEntityLoginProvider.
If you want to disable P2P and use cloud relay instead, set DirectPeerConnectivityOptions=None>
bHasPlayFabVoiceEnabled=<REPLACE ME with true/false>
[/Script/OnlineSubsystemPlayFab.PlayFabNetDriver]
NetConnectionClassName="OnlineSubsystemPlayFab.PlayFabNetConnection"
ReplicationDriverClassName="<REPLACE ME with your existing replication driver class name>" . Skip if the game doesn't have a replication driver class (https://docs.unrealengine.com/5.2/en-US/replication-graph-in-unreal-engine/).
ConnectionTimeout=15.0
InitialConnectTimeout=30.0
[/Script/Engine.GameEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemPlayFab.PlayFabNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
플랫폼별 고려 사항
이 모든 작업을 완료하면 거의 완료된 것입니다. 설정해야 하는 몇 가지 주요 플랫폼별 매개 변수만 남아 있습니다.
GDK
GDK를 사용하여 게임을 개발하는 경우 플랫폼 서비스를 정의하세요.
[OnlineSubsystem]
DefaultPlatformService=PlayFab
NativePlatformService=GDK
Steam
Steam을 사용하여 Win64용 게임을 개발하는 경우 플랫폼 서비스를 정의합니다.
[OnlineSubsystem]
DefaultPlatformService=PlayFab
NativePlatformService=Steam
Switch
Switch에 대한 자세한 내용은 Switch PlayFab OSS와 함께 제공되는 ReadMe.md 파일을 참조하세요. 액세스 권한이 없는 경우 비공개 리포지토리에 대한 액세스 권한을 요청할 수 있습니다.
PS5™ 및 PS4™
PS5™ 및 PS4™에 대한 자세한 내용은 PS5™ 및 PS4™ PlayFab OSS와 함께 제공되는 ReadMe.md 파일을 참조하세요. 액세스 권한이 없는 경우 비공개 리포지토리에 대한 액세스 권한을 요청할 수 있습니다.
플랫폼 간
마지막으로 게임에서 PlayFab의 플랫폼 간 네트워킹 지원을 사용하는 경우 연결을 허용하는 플랫폼을 정의합니다.
[/Script/OnlineSubsystemUtils.OnlineEngineInterfaceImpl]
!CompatibleUniqueNetIdTypes=ClearArray
+CompatibleUniqueNetIdTypes=STEAM
+CompatibleUniqueNetIdTypes=GDK
+CompatibleUniqueNetIdTypes=SWITCH
+CompatibleUniqueNetIdTypes=PS4
+CompatibleUniqueNetIdTypes=PS5
모든 플랫폼은 기본적으로 VoIP를 허용합니다. 특정 플랫폼에 대해 VoIP를 비활성화하려면 다음 예와 같이 플랫폼 모델 이름을 UE 구성 파일에 추가하십시오.
[OnlineSubsystemPlayFabVoiceChatDisabledPlatforms]
!Platforms=ClearArray
+Platforms=WIN64
+Platforms=STEAM
+Platforms=SWITCH
+Platforms=PS4
+Platforms=PS5
이 단계는 게임에서 사용하는 데 필요한 OSS 설정을 완료합니다. 행운을 빕니다!
게임 코드에서 사용
참고 항목
PlayFab 온라인 하위 시스템은 NAME_GameSession
형식의 게임 세션 이름만 지원합니다.
다른 온라인 하위 시스템 플러그 인을 사용하는 것과 유사합니다.
Game.Build.cs에 PublicDependencyModuleNames.AddRange(new string[] { "OnlineSubsystem", "OnlineSubsystemUtils" });
을(를) 추가한 다음 다른 게임 플러그 인과 동일한 방식으로 사용합니다.
GameSession.cpp의 예제 코드:
#include "OnlineSubsystem.h"
#include "OnlineSubsystemUtils.h"
...
bool Game::JoinSession(const FUniqueNetIdPtr UserId, FName SessionName, const FOnlineSessionSearchResult& SearchResult)
{
IOnlineSubsystem* OnlineSub = Online::GetSubsystem(GetWorld()); // Using OnlineSubsystemPlayFab plugin
if (OnlineSub)
{
IOnlineSessionPtr Sessions = OnlineSub->GetSessionInterface(); // Using OnlineSessionInterfacePlayFab.h
if (Sessions.IsValid() && UserId.IsValid())
{
// ...
}
}
// ...
}
GameFriends.cpp의 예제 코드:
#include "OnlineSubsystem.h"
#include "OnlineSubsystemUtils.h"
...
void Game::ViewFriendProfile()
{
IOnlineSubsystem* OnlineSub = Online::GetSubsystem(GetWorld()); // Using OnlineSubsystemPlayFab plugin
if (OnlineSub)
{
IOnlineIdentityPtr Identity = OnlineSub->GetIdentityInterface(); // Using OnlineIdentityInterfacePlayFab.h
if (Identity.IsValid() && Friends.IsValidIndex(FriendIndex))
{
// ....
}
}
}
문제 해결:
문제를 해결하는 데 도움이 되는 방법입니다.
Unreal Engine 설치 빌드
GDK 빌드 플레이버에서 OnlineSubsystemPlayFab으로 Unreal 엔진 설치 빌드를 만들려고 할 때 사용자가 문제에 직면할 수 있습니다. 보다 완벽한 솔루션이 나올 때까지 이 문제를 성공적으로 극복하기 위해 다음 지침을 제공합니다.
UE5.4를 사용하는 경우:
다음 런타임 오류가 발생할 수 있습니다.
Runtime dependency Party.dll is configured to be staged from C:\Program Files (x86)\Microsoft GDK\<version>\Party.dll and \Engine\Plugins\Online\OnlineSubsystemPlayFab\Platforms\GDK\Redist\Party.dll
Engine\Platforms\GDK\Plugins\Online\OnlineSubsystemGDK\로 이동합니다.
OnlineSubsystemGDK.uplugin을 열고
PlayFabParty
를 사용 안 함으로 설정합니다.{ "Name": "PlayFabParty", "Enabled": false }
Engine\Platforms\GDK\Plugins\Online\OnlineSubsystemGDK\Source\로 이동합니다.
OnlineSubsystemGDK.Build.cs를 열고
PlayFabParty
포함을 주석 처리합니다.if (Target.bCompileAgainstEngine) { //PublicDependencyModuleNames.Add("PlayFabParty"); }
UE5.0 - 5.3을 사용하는 경우:
- 컴퓨터에서 Unreal Engine이 설치된 디렉터리를 찾습니다.
- Engine\Platforms\GDK\Plugins\Online\PlayFabParty로 이동합니다.
- PlayFabParty.uplugin을 열고 PlatformDenyList를 사용하여 모듈 구성을 업데이트합니다.
"Modules": [ { "Name": "PlayFabParty", "Type": "Runtime", "LoadingPhase": "Default", "HasExplicitPlatforms": true, "PlatformDenyList": [ "WinGDK", "Win64" ] } ],
- 설치된 빌드에 이러한 플랫폼이 필요한 경우 XB1(PlayFabParty_XB1.uplugin) 및 XSX(PlayFabParty_XSX.uplugin)에 대해 위의 프로세스를 반복합니다. Win64도 설치된 빌드에 필요한 플랫폼인 경우 PlatformDenyList의 배열에 Win64를 추가합니다.
UE4.27+를 사용하는 경우
컴퓨터에서 Unreal Engine이 설치된 디렉터리를 찾습니다.
Engine\Platforms\GDK\Plugins\Online\PlayFabParty로 이동합니다.
PlayFabParty.uplugin 열기
WhitelistPlatforms 키를 BlacklistPlatforms로 교체합니다.
설치된 빌드에 이러한 플랫폼이 필요한 경우 XboxOneGDK(PlayFabParty_XboxOneGDK.uplugin) 및 XSX(PlayFabParty_XSX.uplugin)에 대해 프로세스를 반복합니다. Win64가 설치된 빌드에 필요한 플랫폼이기도 한 경우 BlacklistPlatforms 배열에 Win64를 추가합니다.
UE4.27+에 대한 PlayFabParty.uplugin의 모듈 구성 예제:
"Modules": [
{
"Name": "PlayFabParty",
"Type": "Runtime",
"LoadingPhase": "Default",
"BlacklistPlatforms": ["WinGDK", "Win64"]
}
],
Steam의 핸드셰이크 오류
핸드셰이크 오류(예: LogHandshake: IncomingConnectionless: Error reading handshake packet
)가 표시되는 경우 이 UE 포럼 게시물을 참조하여 설정을 확인하세요.
OnlineSubsystemPlayFab에 대한 워크플로
플랫폼별 고려 사항 섹션에 설명된 단계는 다음을 포함하도록 요청합니다.
[OnlineSubsystem]
DefaultPlatformService=PlayFab
UE OnlineSubsystemModule은 PlayFab에 대한 온라인 하위 시스템 인스턴스를 만들고 PlayFabSingleton을 만들기 시작합니다. 이 시점에서 SDK는 FOnlineSubsystemPlayFab::Init()
에서 초기화되며, 여기서 PlayFab TitleID를 사용하여 파티 및 멀티 플레이어 SDK를 모두 초기화합니다(이 titleID는 게임 구성 파일 내에서 정의됨). 초기화하는 동안 기본 온라인 하위 시스템으로 CreatePlayFabSocketSubsystem()
을(를) 만듭니다.
멀티 플레이어 SDK의 워크플로: FOnlineSubsystemPlayFab::Init()
은(는) 타이틀에 대한 InitializeMultiplayer()
멀티 플레이어 SDK 싱글톤을 초기화합니다.
PlayFabLobby.cpp
에서 FPlayFabLobby::DoWork()
은(는) 멀티플레이어 API에 의해 트리거된 상태 변경을 처리합니다(API의 경우 Platforms/GDK/Include/PFLobby.h
보기).
멀티 파티 SDK의 워크플로: FOnlineSubsystemPlayFab::Init()
은(는) 타이틀에 대한 InitializeParty()
멀티 플레이어 SDK 싱글톤을 초기화합니다.
OnlineSubsystemPlayFab.cpp
에서 FOnlineSubsystemPlayFab::DoWork()
은(는) 파티 API에 의해 트리거된 상태 변경을 처리합니다(API의 경우 Platforms/GDK/Include/Party.h
보기).
"PlayStation"은 Interactive Entertainment Inc.의 등록 상표 또는 상표입니다.
"PS4"는 Sony Interactive Entertainment Inc.의 등록 상표 또는 상표입니다.
"PS5"는 Sony Interactive Entertainment Inc.의 등록 상표 또는 상표입니다.