Freigeben über


Schnellstart: PlayFab Online Subsystem (OSS)

Dieser Schnellstartleitfaden hilft Ihnen, Multiplayer-Features wie Lobby, Matchmaking und Party für Xbox, PC, Nintendo Switch, PlayStation®5 und PlayStation®4-Spiele einzurichten und zu verwenden, die mit Unreal Engine 4 oder Unreal Engine 5 erstellt wurden. Eine vollständige Liste der unterstützten Plattformen und Versionen in UE4 oder UE5 finden Sie unter Unterstützte Plattformen.

Nachdem Sie die relevanten Schritte ausgeführt haben, die auf dieser Seite für Ihre Zielplattformen beschrieben sind, können Sie mit der Verwendung des OSS beginnen. Authentifizierung, Netzwerk, VOIP, Gruppieren in Lobbies und Matchmaking werden in Ihrem Namen verarbeitet, ohne dass weitere Änderungen erforderlich sind.

Herunterladen und Installieren des PlayFab Online-Subsystems

Wechseln Sie zu PlayFab Online SubSystem , um die PlayFab Online SubSystem-Quelle herunterzuladen oder zu klonen. Der heruntergeladene oder geklonte Repositoryname lautet PlayFabMultiplayerUnreal. Das Repository muss in OnlineSubsystemPlayFab umbenannt werden.

Voraussetzungen

  • PlayFab-Titel-ID: Wenn Sie keine Titel-ID für PlayFab Party- und Multiplayer-SDKs konfiguriert haben, finden Sie weitere Informationen unter Aktivieren der PlayFab-Party.

GDK, PC, Switch, PlayStation®5 und PlayStation®4

Ersteinrichtung

Codebasis der Unreal-Engine

  • Kopieren Sie den Ordner OnlineSubsystemPlayFab und dessen Inhalt aus in Ihr UE-Verzeichnis unter Engine\Plugins\Online.
  • Führen Sie GenerateProjectFiles.bat aus, um Projektdateien für die Engine zu erstellen.
  • Laden Sie das Projekt in Visual Studio, indem Sie auf die neue UE5.sln-Datei doppelklicken.
  • Legen Sie Ihre Lösungskonfiguration auf Entwicklungs-Editor und Ihre Lösungsplattform auf Win64 fest, klicken Sie dann mit der rechten Maustaste auf das UE5-Ziel , und wählen Sie Erstellen aus.

Spielcodebasis

  • Wenden Sie die folgenden Änderungen auf den Abschnitt Plugins Ihrer UPROJECT-Datei an, um OnlineSubsystemPlayFab Ihrer Plug-In-Liste hinzuzufügen.
    • Sie können alle Plattformen entfernen, auf denen Sie nicht versenden.
    • Verwenden Sie XboxOneGDK anstelle von XB1, wenn Sie UE4 verwenden, da UE5 XboxOneGDK als veraltet gekennzeichnet
{
 "Name": "OnlineSubsystemPlayFab",
 "Enabled": true,
 "WhitelistPlatforms": [
  "XB1",
  "WinGDK",
  "XSX",
  "Win64",
  "Switch",
  "PS4",
  "PS5"
 ],
 "SupportedTargetPlatforms": [
  "XB1",
  "WinGDK",
  "XSX",
  "Win64",
  "Switch",
  "PS4",
  "PS5"
 ]
}
  • Generieren Sie die Spiellösungsdatei, indem Sie mit der rechten Maustaste auf die UPROJECT-Datei klicken und "Unreal Engine-Version wechseln" in den obigen Unreal Engine-Codepfad auswählen.

Spielkonfiguration

  • Unabhängig davon, auf welche Plattform Sie abzielen, muss Ihr Spiel bestimmte PlayFab-spezifische Werte in der INI-Datei Ihres gewünschten Plattformziels konfigurieren (befindet sich unter [yourGameDirectory]/Platforms/[YourPlatform]/Config).
    • Xbox Series X GDK: XSXEngine.ini
    • PC GDK: WinGDKEngine.ini
    • Xbox One GDK: XB1Engine.ini (oder XboxOneGDKEngine.ini, wenn Sie UE4 verwenden)
    • PC Steam: WindowsEngine.ini (oder suchen Sie es in [yourGameDirectory]/Config/Windows)
    • Nintendo Switch SwitchEngine.ini
    • PS4™ -PS4Engine.ini
    • PS5™ -PS5Engine.ini
  • Ersetzen Sie die INI-Abschnitte in der Konfiguration, wenn sie bereits vorhanden sind (z. B. Engine.GameEngine) durch die in den folgenden Abschnitten dargestellten Abschnitte.
  • Stellen Sie sicher, dass Sie alle <REPLACE ME-Felder> durch Ihre Daten ersetzen:
[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")

Plattformspezifische Überlegungen

Damit sind wir fast fertig. Es müssen nur noch einige wichtige plattformspezifische Parameter festgelegt werden.

GDK

Wenn Sie Spiele mit GDK entwickeln, definieren Sie die Plattformdienste:

[OnlineSubsystem]
DefaultPlatformService=PlayFab
NativePlatformService=GDK

Steam

Wenn Sie Spiele für Win64 mit Steam entwickeln, definieren Sie Ihre Plattformdienste:

[OnlineSubsystem]
DefaultPlatformService=PlayFab
NativePlatformService=Steam

Wechseln

Weitere Informationen zu Switch finden Sie in der ReadMe.md-Datei , die im Lieferumfang von Switch PlayFab OSS enthalten ist. Wenn du keinen Zugriff hast, kannst du Zugriff auf unsere privaten Repositorys anfordern.

PS5™ und PS4™

Weitere Informationen zu PS5™ und PS4™ finden Sie in der ReadMe.md-Datei , die im Lieferumfang von PS5™ und PS4™ PlayFab OSS enthalten ist. Wenn du keinen Zugriff hast, kannst du Zugriff auf unsere privaten Repositorys anfordern.

Plattformübergreifend

Wenn Ihr Spiel die plattformübergreifende Netzwerkunterstützung von PlayFab nutzt, definieren Sie, welche Plattformen Sie für die Verbindung zulassen:

[/Script/OnlineSubsystemUtils.OnlineEngineInterfaceImpl]
!CompatibleUniqueNetIdTypes=ClearArray
+CompatibleUniqueNetIdTypes=STEAM
+CompatibleUniqueNetIdTypes=GDK
+CompatibleUniqueNetIdTypes=SWITCH
+CompatibleUniqueNetIdTypes=PS4
+CompatibleUniqueNetIdTypes=PS5

Alle Plattformen lassen VoIP standardmäßig zu. Um VoIP für eine bestimmte Plattform zu deaktivieren, fügen Sie den Namen des Plattformmodells ihrer UE-Konfigurationsdatei hinzu, wie im folgenden Beispiel gezeigt.

[OnlineSubsystemPlayFabVoiceChatDisabledPlatforms]
!Platforms=ClearArray
+Platforms=WIN64
+Platforms=STEAM
+Platforms=SWITCH
+Platforms=PS4
+Platforms=PS5

Mit diesen Schritten wird die Einrichtung von OSS abgeschlossen, die in Ihrem Spiel verwendet werden muss. Viel Glück!

Verwenden im Spielcode

Notiz

Das PlayFab Online-Subsystem unterstützt nur die Benennung von Spielsitzungen als NAME_GameSession

Ähnlich wie bei der Verwendung anderer Online-Subsystem-Plug-Ins:

Fügen Sie Game.Build.cs hinzuPublicDependencyModuleNames.AddRange(new string[] { "OnlineSubsystem", "OnlineSubsystemUtils" });, und verwenden Sie es dann auf die gleiche Weise wie andere Spiele-Plug-Ins.

Beispielcode in 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())
		{
			// ...
		}
	}
	// ...
}

Beispielcode in 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))
		{
			// ....
		}
	}
}

Beheben:

Möglichkeiten zur Problembehandlung.

Installierte Builds der Unreal-Engine

Benutzer können probleme haben, wenn sie versuchen, einen unreal Engine Installed Build mit dem OnlineSubsystemPlayFab für GDK-Build-Varianten zu erstellen. Wir bieten die folgenden Anleitungen, um dieses Problem erfolgreich zu beheben, bis es eine umfassendere Lösung gibt.

Bei Verwendung von UE5.4:

  • Möglicherweise tritt der folgende Laufzeitfehler auf: 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

  • Navigieren Sie zu Engine\Platforms\GDK\Plugins\Online\OnlineSubsystemGDK\

  • Öffnen Sie OnlineSubsystemGDK.uplugin, und legen Sie auf deaktiviert fest PlayFabParty :

    {
        "Name": "PlayFabParty",
        "Enabled": false
    }
    
  • Navigieren Sie zu Engine\Platforms\GDK\Plugins\Online\OnlineSubsystemGDK\Source\

  • Öffnen Sie OnlineSubsystemGDK.Build.cs, und kommentieren Sie die Aufnahme von PlayFabPartyaus:

    if (Target.bCompileAgainstEngine)
    {
        //PublicDependencyModuleNames.Add("PlayFabParty");
    }
    

Wenn Sie UE5.0 bis 5.3 verwenden:

  • Suchen Sie das Verzeichnis, in dem die Unreal-Engine auf dem Computer installiert ist.
  • Navigieren Sie zu Engine\Platforms\GDK\Plugins\Online\PlayFabParty.
  • Öffnen Sie PlayFabParty.uplugin, und aktualisieren Sie die Modules-Konfiguration mit PlatformDenyList:
    "Modules": [
            {
                "Name": "PlayFabParty",
                "Type": "Runtime",
                "LoadingPhase": "Default",
                "HasExplicitPlatforms": true,
                "PlatformDenyList": [ "WinGDK", "Win64" ]
            }
        ],
    
  • Wiederholen Sie den obigen Prozess für XB1 (PlayFabParty_XB1.uplugin) und XSX (PlayFabParty_XSX.uplugin), wenn diese Plattformen für den installierten Build erforderlich sind. Wenn Win64 auch eine erforderliche Plattform für den installierten Build ist, fügen Sie Win64 im Array von PlatformDenyList hinzu.

Wenn Sie UE4.27 und höher verwenden,

  • Suchen Sie das Verzeichnis, in dem die Unreal-Engine auf dem Computer installiert ist.

  • Navigieren Sie zu Engine\Platforms\GDK\Plugins\Online\PlayFabParty.

  • Öffnen Sie PlayFabParty.uplugin.

  • Ersetzen Sie den Schlüssel WhitelistPlatforms durch BlacklistPlatforms.

  • Wiederholen Sie den Vorgang für XboxOneGDK (PlayFabParty_XboxOneGDK.uplugin) und XSX (PlayFabParty_XSX.uplugin), wenn diese Plattformen für den installierten Build erforderlich sind. Wenn Win64 auch eine erforderliche Plattform für den installierten Build ist, fügen Sie Win64 im Array von BlacklistPlatforms hinzu.

    Beispielkonfiguration für Module in PlayFabParty.uplugin für UE4.27+::

	"Modules": [
		{
			"Name": "PlayFabParty",
			"Type": "Runtime",
			"LoadingPhase": "Default",
			"BlacklistPlatforms": ["WinGDK", "Win64"]
		}
	],

HandShake-Fehler auf Steam

Wenn Handshakefehler (z LogHandshake: IncomingConnectionless: Error reading handshake packet. B. ) angezeigt werden, lesen Sie diesen Beitrag im UE-Forum , um die Einstellungen zu überprüfen.

Workflow für OnlineSubsystemPlayFab

Die im Abschnitt "Plattformspezifische Überlegungen" beschriebenen Schritte fordern Folgendes auf:

[OnlineSubsystem]
DefaultPlatformService=PlayFab

UE OnlineSubsystemModule erstellt eine Online-Subsysteminstanz für PlayFab und beginnt mit der Erstellung des PlayFabSingletons. An diesem Punkt wird das SDK in FOnlineSubsystemPlayFab::Init()initialisiert, wobei sowohl Party- als auch Multiplayer-SDKs mit PlayFab TitleID initialisiert werden (diese titleID wird in der Game Configuration-Datei definiert. Während der Initialisierung werden ⁠CreatePlayFabSocketSubsystem() wir als Haupt-Onlinesubsystem verwendet.

Workflow des Multiplayer-SDK: FOnlineSubsystemPlayFab::Init() Initialisiert das InitializeMultiplayer() Multiplayer-SDK-Singleton für Ihren Titel. In verarbeitet die zustandsänderungen, die PlayFabLobby.cppFPlayFabLobby::DoWork() von Multiplayer-APIs ausgelöst werden (Ansicht Platforms/GDK/Include/PFLobby.h für APIs).

Workflow des Party SDK: FOnlineSubsystemPlayFab::Init() Initialisiert das InitializeParty() Multiplayer-SDK-Singleton für Ihren Titel. In verarbeitet die zustandsänderungen, die OnlineSubsystemPlayFab.cppFOnlineSubsystemPlayFab::DoWork() von Partei-APIs ausgelöst werden (Ansicht Platforms/GDK/Include/Party.h für APIs).

"PlayStation" ist eine eingetragene Marke oder Marke von Sony Interactive Entertainment Inc.

"PS4" ist eine eingetragene Marke oder Marke von Sony Interactive Entertainment Inc.

"PS5" ist eine eingetragene Marke oder Marke von Sony Interactive Entertainment Inc.