Freigeben über


Schnellstart: PlayFab Online-Subsystem

In diesem Artikel erfahren Sie, wie Sie Azure PlayFab Multiplayer-Features wie Lobby, Matchmaking und Party für Spiele einrichten und verwenden, die mit Unreal Engine 4 oder Unreal Engine 5 erstellt wurden. Eine vollständige Liste der unterstützten Plattformen und Versionen in Unreal Engine 4 oder Unreal Engine 5 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 PlayFab Online-Subsystems (PF 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 zum PlayFab Online-Subsystem , um die PF OSS-Quelle herunterzuladen oder zu klonen. Der heruntergeladene oder geklonte Repositoryname lautet PlayFabMultiplayerUnreal. Das Repository muss in OnlineSubsystemPlayFab umbenannt werden.

Voraussetzungen

  • PlayFab TitleID: Wenn Sie keine TitleID für PlayFab Party und Multiplayer Software Development Kits (SDKs) konfiguriert haben, finden Sie weitere Informationen unter Aktivieren der PlayFab-Party.

Microsoft Game Development Kit (GDK), PC, Switch, PlayStation®5 und PlayStation®4

Ersteinrichtung

Unreal Engine Codebasis

  • Kopieren Sie den Ordner OnlineSubsystemPlayFab und seinen Inhalt in Ihr Unreal Engine Verzeichnis unter Engine\Plugins\Online.
  • Führen Sie aus GenerateProjectFiles.bat , um Projektdateien für die Engine zu erstellen.
  • Laden Sie das Projekt in Visual Studio, indem Sie die neue UE5.sln Datei auswählen.
  • Legen Sie Ihre Lösungskonfiguration auf Development Editor und Ihre Lösungsplattform auf Win64 fest. Wählen Sie das Unreal Engine 5-Ziel und dann Erstellen aus.

Spielcodebasis

  • Um OnlineSubsystemPlayFab ihrer Plug-In-Liste hinzuzufügen, wenden Sie die folgenden Änderungen auf den Abschnitt Plug-Ins der Projektdatei an.
    • Entfernen Sie alle Plattformen, auf denen Sie nicht versenden.
    • Verwenden Sie XboxOneGDK anstelle von XB1, wenn Sie Unreal Engine 4 verwenden. Unreal Engine 5 veraltet XboxOneGDK
{
    "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 die {ProjectName}.uproject Datei auswählen und dann Unreal Engine Version zum Unreal Engine Codepfad wechseln 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 Unreal Engine 4 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

Richten Sie bei der Entwicklung von Spielen mit dem GDK die Plattformdienste ein.

[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 verwendet, definieren Sie, welche Plattformen Sie zulassen, um eine Verbindung herzustellen.

[/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 Unreal Engine 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.

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 hinzu PublicDependencyModuleNames.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))
        {
            // ....
        }
    }
}

Problem beheben

Möglichkeiten zur Problembehandlung.

Unreal Engine installierter Builds

Benutzer können Probleme haben, wenn sie versuchen, einen Unreal Engine installierten Build mit onlineSubsystemPlayFab auf GDK-Buildaromen zu erstellen. Wir bieten die folgenden Anleitungen, um dieses Problem erfolgreich zu beheben, bis es eine umfassendere Lösung gibt.

Wenn Sie Unreal Engine 5.5 oder Unreal Engine 5.4 verwenden:

  • 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 Unreal Engine 5.0 bis 5.3 verwenden:

  • Suchen Sie das Verzeichnis, in dem 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 diesen Vorgang 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 Unreal Engine 4.27 und höher verwenden:

  • Suchen Sie das Verzeichnis, in dem 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.

Modulkonfigurationsbeispiel in PlayFabParty.uplugin für Unreal Engine 4.27 und höher:

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

HandShake-Fehler auf Steam

Wenn Handshakefehler (zLogHandshake: IncomingConnectionless: Error reading handshake packet. B. ) angezeigt werden, lesen Sie diesen Unreal Engine Forumbeitrag, um die Einstellungen zu überprüfen.

Workflow für OnlineSubsystemPlayFab

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

[OnlineSubsystem]
DefaultPlatformService=PlayFab

Unreal Engine OnlineSubsystemModule erstellt ein Onlinesubsystem instance für PlayFab und beginnt mit der Erstellung des PlayFabSingleton. 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 wir ⁠CreatePlayFabSocketSubsystem() als Standard 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.