HIKI Tech Blog

yhikishimaのブログ。ゆるくUE4やUnity、web開発の記事を書いてます。

【UE5】Playfabでサーバー構築 vol.1

1. はじめに

Playfabを使ったことなかったので、環境構築してみた。 せっかくなのでUE5にて。

2. プラグインを導入

Unreal Engine クイックスタート - PlayFab | Microsoft Docs

上記クイックスタート通りにプラグインを導入。

しかし設定のプラグインにPlayfabがなかったので、Githubから直接導入。

GitHub - PlayFab/UnrealMarketplacePlugin: Source code for the PlayFab Marketplace Plugin for Unreal

まだUE5用のプラグインがなかったので、4.27でプラグイン追加。

[ProjectName]/Plugins/PlayFabPlugin の位置に配置。

[ProjectName].build.cs のPublicDependencyModuleNamesに PlayFabPlayFabCpp PlayFabCommon を追加。

f:id:yhikishima:20211031162907p:plain

[ProjectName].uprojectで Generate Visual Studio project files を実行してから .slnを開いて再度ビルド。

疋島康成

4.27のエラーがでるが、気にせずOKを押す。

3. ログイン処理

Editorから新しいアクターを作成する。

作成したアクターのCPPのコードを以下に変更。

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "PlayFab.h"
#include "Core/PlayFabError.h"
#include "Core/PlayFabClientDataModels.h"
#include "LoginActor.generated.h"

UCLASS()
class ALoginActor : public AActor
{
    GENERATED_BODY()
public:
    ALoginActor();
    virtual void BeginPlay() override;
    void OnSuccess(const PlayFab::ClientModels::FLoginResult& Result) const;
    void OnError(const PlayFab::FPlayFabCppError& ErrorResult) const;

    virtual void Tick(float DeltaSeconds) override;
private:
    PlayFabClientPtr clientAPI = nullptr;
};
#include "LoginActor.h"
#include "Core/PlayFabClientAPI.h"

ALoginActor::ALoginActor()
{
    PrimaryActorTick.bCanEverTick = true;
}

void ALoginActor::BeginPlay()
{
    Super::BeginPlay();

    clientAPI = IPlayFabModuleInterface::Get().GetClientAPI();

    PlayFab::ClientModels::FLoginWithCustomIDRequest request;
    request.CustomId = TEXT("GettingStartedGuide");
    request.CreateAccount = true;

    clientAPI->LoginWithCustomID(request,
        PlayFab::UPlayFabClientAPI::FLoginWithCustomIDDelegate::CreateUObject(this, &ALoginActor::OnSuccess),
        PlayFab::FPlayFabErrorDelegate::CreateUObject(this, &ALoginActor::OnError)
    );
}

void ALoginActor::OnSuccess(const PlayFab::ClientModels::FLoginResult& Result) const
{
    UE_LOG(LogTemp, Log, TEXT("Congratulations, you made your first successful API call!"));
}

void ALoginActor::OnError(const PlayFab::FPlayFabCppError& ErrorResult) const
{
    UE_LOG(LogTemp, Error, TEXT("Something went wrong with your first API call.\nHere's some debug information:\n%s"), *ErrorResult.GenerateErrorReport());
}

void ALoginActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
}

DefaultEngine.iniに以下を追加。

[/Script/PlayFabCommon.PlayFabRuntimeSettings]
TitleId = XX123
DeveloperSecretKey = ASecretKeyThatNeedsRemovingOnClientBuilds

TitleIdには作成したPlayFabのアカウントのIDを入力。

作成したアクターをワールドに追加。

以下のログがでていれば、PlayFabの初期化が完了!

疋島康成

あとはアカウントのダッシュボードからAPIcallのSuccessが完了していれば、OK。

疋島康成

次はデータの取得と更新を試してみようと思う。

参考

Unreal Engine クイックスタート - PlayFab | Microsoft Docs

Unreal 4 Marketplace Plugin missing SetTitleId - Playfab Community