はじめに
「UE5でEpic Online Services(EOS)を使ってみる」の続きです。
事前の設定が必要なので、未設定の方は準備編
をご確認ください。
ログインは様々なアカウントサービスを用いてEOSに接続できます。
今回は手早く実装するため、Epicアカウントでの実装を行います。
目次
この章では、ログイン機能に必要な実装を行っていきます。
必要なクラスを作成してC++を実装し、Blueprintで実行出来る状態にしてテストを行います。
1.クラス作成
1-1.C++クラス
ログイン用とユーザー定義データ用のクラスを作成します。
親クラスをなしにして、EOS_DataDefinitionをC++クラスで作成します。
cppファイルは必要ないので削除します。
OnlineBlueprintCallProxyBaseを親クラスに指定して、EOS_LoginをC++クラスで作成します。
1-2.Blueprintクラス
機能実装用のクラスを作成します。
GameInstanceを親クラスに指定して、EOS_GameInstanceをBlueprintクラスで作成します。
作成したEOS_GameInstanceを、プロジェクト設定からデフォルトのゲームインスタンスとして指定します。
2.C++
C++を以下で実装します。
EOS_DataDefinition.h
#pragma once
#include "CoreMinimal.h"
#include "EOS_DataDefinition.generated.h"
UENUM()
enum class EAuthType : uint8
{
//ブラウザを介して認証を行います
accountportal,
//DevAuthToolを介して認証を行います
developer
};
EOS_Login.h
#pragma once
#include "CoreMinimal.h"
#include "Net/OnlineBlueprintCallProxyBase.h"
#include "EOS_DataDefinition.h"
#include "EOS_Login.generated.h"
UCLASS()
class EOS_API UEOS_Login : public UOnlineBlueprintCallProxyBase
{
GENERATED_BODY()
UPROPERTY(BlueprintAssignable)
FEmptyOnlineDelegate OnSuccess;
UPROPERTY(BlueprintAssignable)
FEmptyOnlineDelegate OnFailure;
UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true", WorldContext = "WorldContextObject"), Category = "EOS")
static UEOS_Login* Login(UObject* WorldContextObject, FString UserID, FString UserToken, EAuthType AuthType);
virtual void Activate() override;
private:
void OnLoginEOSComplete(int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& ErrorVal);
private:
UWorld* World;
TWeakObjectPtr<UObject> WorldContextObject;
FString UserID;
FString UserToken;
EAuthType AuthType;
};
EOS_Login.cpp
#include "OnlineSubsystemUtils.h"
#include "EOS_Login.h"
UEOS_Login* UEOS_Login::Login(UObject* WorldContextObject,FString UserID, FString UserToken, EAuthType AuthType)
{
UEOS_Login* LoginObject = NewObject<UEOS_Login>();
LoginObject->UserID = UserID;
LoginObject->UserToken = UserToken;
LoginObject->AuthType = AuthType;
LoginObject->WorldContextObject = WorldContextObject;
return LoginObject;
}
void UEOS_Login::Activate()
{
World = GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull);
if (!World)
{
UE_LOG(LogTemp, Error, TEXT("Login:Worldの取得に失敗"));
OnFailure.Broadcast();
return;
}
IOnlineSubsystem* SubsystemRef = Online::GetSubsystem(World);
IOnlineIdentityPtr IdentityPointerRef = SubsystemRef->GetIdentityInterface();
FOnlineAccountCredentials AccountCredentials(StaticEnum< EAuthType>()->GetDisplayValueAsText(AuthType).ToString(), UserID, UserToken);
if (IdentityPointerRef) {
IdentityPointerRef->OnLoginCompleteDelegates->AddUObject(this, &UEOS_Login::OnLoginEOSComplete);
IdentityPointerRef->Login(0, AccountCredentials);
return;
}
OnFailure.Broadcast();
}
void UEOS_Login::OnLoginEOSComplete(int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& ErrorVal)
{
if (bWasSuccessful)
{
UE_LOG(LogTemp, Warning, TEXT("ログイン成功"));
OnSuccess.Broadcast();
}
else
{
UE_LOG(LogTemp, Error, TEXT("ログイン失敗 - %s"), *ErrorVal);
OnFailure.Broadcast();
}
}
3.Blueprint
Blueprintを以下で実装します。
EOS_Gameinstanceにカスタムイベントを用意し、以下で実装します。
Login:EOSにログインを試みます。各項目は以下を指定します。
・UserID:127.0.01:”DevAuthToolで指定したポート番号”
・UserToken:”DevAuthToolで指定したプロファイル名”
・AuthType:Developer

4.テスト
5-1.DevAuthTool
DevAuthToolを通じ認証が行える状態にするため、DevAuthToolを起動します。
ポートの指定はBlueprintの実装と同じものにしてください。

5-2.ログイン
Editorから、Loginを実行します。

5-3.承認
初めての場合はブラウザでアプリを許可するか確認が出ます。アプリに進む>許可するを押します。

5-4.ログイン確認
Editorに戻り、ログイン成功のログが出ていればひとまずの確認は完了です。
確かな確認は、次回のデータ更新の確認を以て完了とします。

おわり
お疲れ様です。
以上でログイン編は終わりです、次は統計データ編です。