在虚幻引擎中设置 zeuz

入门

为集成 虚幻引擎 和 zeuz,我们创建了一个插件,在 虚幻商城 中可免费下载。

本教程将指导您设置虚幻引擎,安装 zeuz SDK 商城插件,并使用该插件在虚幻引擎中进行首次 API 调用。

您可使用蓝图、C++ 或同时使用两者进行首次 API 调用。

虚幻引擎设置和插件安装

  • 注册并登陆虚幻引擎网页
  • 下载 Epic Games Launcher
  • 打开 Epic Games Launcher
  • 在左侧导航栏中,选择 Unreal Engine (虚幻引擎) 页签,并点击 Library (库)
  • 点击 +Add Versions (安装新版虚幻引擎)
  • 选择最新的稳定版本
  • 安装 zeuz SDK 插件到您的引擎中
  • 在 Epic Games Launcher 中,前往 Marketplace (虚幻商城) 页面,搜索 zeuz SDK

在蓝图中使用 SDK

该部分为在蓝图中使用 zeuz SDK 的示例,教您使用该 SDK 登录到 zeuz 后端,这对于进一步的 API 调用是必需的。

  1. 在编辑器工具栏中,打开 Blueprints (蓝图) → Open Level Blueprint (打开关卡蓝图)
  2. 连接到现有的 Event Begin Play (事件开始运行) 节点 Zeuz SDKAuthSimpleAuthLogin
  3. In LoginIn Password 中输入登陆 zeuz 控制面板的用户名和密码
  4. Endpoint 中输入 https://zcp.zeuz.io/api/v1 作为端点
  5. Ctx Proj IDCtx Env ID 中输入 zeuz 控制面板 中您想使用的 Proj IDEnv ID

由于 API 调用是异步的,登录节点不会立即输出任何结果,而是由事件传递。

  1. On Success 引脚创建一个自定义事件,并附加 Print String (打印字符串) 来显示当前登陆的 Developer ID
  2. On Failure 引脚创建一个自定义事件,并附加 Print String (打印字符串) 来显示 Error

完成以上步骤后,点击 运行 按钮启动蓝图,运行结果会显示在游戏窗口中。

在 C++ 中使用 SDK

在 C++ 中调用 zeuz SDK 与蓝图无异,唯一的差别是蓝图的输出打印到屏幕上,而 C++ 的输出以其他形式打印。

  1. 保存 zeuz 控制面板中的 Proj IDEnv ID 到默认上下文中
  2. 输入用户名和密码到身份认证的输入结构中
  3. 绑定回调委托与 API 调用结果
  4. 调用 API 功能 AuthLogin
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
DEFINE_LOG_CATEGORY_STATIC(LogTest, Log, All);

void TestAuth() {
  FZeuzContext& ctx = FZeuzContext::Def;
  ctx.ProjID = "ovDwSBfgjlXNtBOmQqkSNlFAenS";
  ctx.EnvID = "uOJvpWmhzkVByequrudsOxcExaH";

  FZeuzSimpleAuthLoginIn login;
  login.Login = "demo@demo.com";
  login.Password = "demo";

  UZeuzApiSimpleAuth::FDelegateAuthLogin onresult;
  onresult.BindLambda(
    [](FZeuzContext Context, FString Error) {
      if (!Error.IsEmpty())
      {
        UE_LOG(LogTest, Warning, TEXT("Error: %s"), *Error);
      } else {
        UE_LOG(LogTest, Warning, TEXT("Success: %s"), *Context.DeveloperID);
      }
    }
  );

  UZeuzApiSimpleAuth::AuthLogin(login, onresult, ctx);
}

使用在线子系统

从商城或 https://sdk.zeuz.io/ 中下载 OnlineSubsystemZeuz

添加 OnlineSubsystemOnlineSubsystemZeuz 到您的 ProjectName.Build.cs 中。

1
2
3
PublicDependencyModuleNames.AddRange(new string[] { 
  "Core", "CoreUObject", "Engine", "InputCore", 
  "OnlineSubsystem", "OnlineSubsystemZeuz" 

在 Config/DefaultEngine.ini 中激活在线子系统,然后设置您的 ProjIDEnvID

1
2
3
4
5
6
7
[OnlineSubsystem]
DefaultPlatformService=Zeuz

[OnlineSubsystemZeuz]
Endpoint="<<API_ENDPOINT_URL>>"
ProjID="ovDwSBfgjlXNtBOmQqkSNlFAenS"
EnvID="uOJvpWmhzkVByequrudsOxcExaH"

现在您可以在项目里使用 OnlineSubsystem 了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "OnlineSubsystemZeuz.h"

void FZeuzUtils::AuthLoginProfile(const FString& Username, const FString& Password, const FZeuzRequestResult& RequestResult)
{
    // 存储句柄的静态委托映射。
    static TMap<uint32, FDelegateHandle> DelegateHandles;
    // 使用身份在线子系统登录。
    IOnlineIdentityPtr Identity = FZeuzOSSUtils::GetIdentityInterface();
    FOnLoginCompleteDelegate OnResult;
    FOnlineAccountCredentials Credentials;
    Credentials.Id    = Username;
    Credentials.Token = Password;
    // 委托的句柄是在委托发生后创建的,因此委托有一个对委托存储路径的引用。
    uint32 DelegateKey = GetFreshKey(DelegateHandles);
    OnResult.BindLambda([RequestResult, DelegateKey, Identity](int32 LocalUserNum, bool bSuccess, const FUniqueNetId& Id, const FString& Error) {
        if (bSuccess)
        {
            UE_LOG(LogZeuzUtils, Display, TEXT("AuthLoginProfile - Connection success: %s"), *Id.ToString());
            RequestResult.ExecuteIfBound(true);
        }
        else
        {
            UE_LOG(LogZeuzUtils, Error, TEXT("AuthLoginProfile - Error: %s"), *Error);
            RequestResult.ExecuteIfBound(false);
        }
        if (!DelegateHandles.Contains(DelegateKey))
        {
            UE_LOG(LogZeuzUtils, Error, TEXT("Unable to find the OnLoginCompleteDelegateHandle"), *Error);
            return;
        }
        Identity->ClearOnLoginCompleteDelegate_Handle(0, DelegateHandles[DelegateKey]);
        DelegateHandles.Remove(DelegateKey);
    });
    DelegateHandles.Add(DelegateKey, Identity->AddOnLoginCompleteDelegate_Handle(0, OnResult));
    bool bSentRequest = Identity->Login(0, Credentials);
    if (!bSentRequest)
    {
        RequestResult.ExecuteIfBound(false);
    }
}

注释和解释

  • 一个 上下文 包含一个对项目和环境的引用,还包含一个登录会话。

    在大多数情况下,只需要一个 上下文,因此存在 默认上下文 FZeuzContext::Def

    如删除 上下文 则会使用 默认上下文

  • 蓝图 API 函数的调用有 On SuccessOn Failure 两种委托,无论哪种委托回调函数都会被调用。

  • 您可以使用开发人员账号、用户账号,或 API key 及其密码来完成登录。

  • 一个会话的有效时长为 24 小时,但 SDK 可在会话过期后自动重新登录。


2021年6月30日 该文档已更新并通过审校:更新 zeuz 控制面板的 URL


最近更新时间: October 20, 2021 (cf3b7c5e)