使用 Steam 和 Unity 设置 PlayFab 身份验证

本教程指导您完成通过 SteamWorks 和 Unity,使用 Steam 登录 PlayFab 的步骤。

先决条件

开始前,您应具有:

设置 PlayFab 游戏

若要启用对 Steam 授权的支持,PlayFab 要求启用 Steam 加载项。

转到 Game Manager 页:

  1. 选择 加载项 菜单项。
  2. 在可用 加载项列表中,找到 Steam 并选择标题链接:

游戏管理器加载项选项卡

  1. 输入 应用 ID
  2. 输入 Web API 密钥
  3. 然后选择 安装 Steam

Game Manager 安装 Steam 加载项

为 Steam 集成设置 PlayFab 游戏到此结束。

设置 Unity 项目

首先从版本页面下载 Steamworks.NET 的最新版本。

  • 获取 Unity 程序包的发行版本,然后将它导入项目中。
  • 导入程序包后,关闭 Unity。
  • 导航到 Project 根文件夹。
  • 找到 steam_appid.txt 文件。
  • 打开该文件并将 App ID 值替换为自己的 ID。

Unity 项目 - 更新 AppId

重新打开 Unity 并创建新场景。

在该场景中,创建名为 Steam的新 gameobject

  1. SteamManager 组件添加到 gameobject。 此组件是 Steamworks.Net 的一部分。
  2. 创建 SteamScript 组件并将其添加到 gameobject

Unity 项目 - 添加 Steam 对象

下面的示例演示 SteamScript 组件的代码。

感谢 Dylan Hunt 提供此示例。

// Import all the necessary namespaces
using System;
using System.Text;
using PlayFab;
using PlayFab.ClientModels;
using Steamworks;
using UnityEngine;

public class SteamScript : MonoBehaviour {
    //This method returns
    public string GetSteamAuthTicket() {
        byte[] ticketBlob = new byte[1024];
        uint ticketSize;

        // Retrieve ticket; hTicket should be a field in the class so you can use it to cancel the ticket later
        // When you pass an object, the object can be modified by the callee. This function modifies the byte array you've passed to it.
        HAuthTicket hTicket = SteamUser.GetAuthSessionTicket(ticketBlob, ticketBlob.Length, out ticketSize);

        // Resize the buffer to actual length
        Array.Resize(ref ticketBlob, (int)ticketSize);

        // Convert bytes to string
        StringBuilder sb = new StringBuilder();
        foreach (byte b in ticketBlob) {
            sb.AppendFormat("{0:x2}", b);
        }
        return sb.ToString();
    }

    public void OnGUI() {
        if (GUILayout.Button("Log In")) {
            if (SteamManager.Initialized) {
                // Execute PlayFab API call to log in with steam ticket
                PlayFabClientAPI.LoginWithSteam(new LoginWithSteamRequest {
                    CreateAccount = true,
                    SteamTicket = GetSteamAuthTicket()
                }, OnComplete,OnFailed);
            }
        }
    }

    // Utility callbacks to log the result
    private void OnComplete(LoginResult obj) {
        Debug.Log("Success!");
    }

    private void OnFailed(PlayFabError error) {
        Debug.Log("Failed: " + error.GenerateErrorReport());
    }
}

测试

可以直接在编辑器中进行测试:

  1. 运行场景并选择 登录 按钮。
  2. 控制台消息应在片刻后显示,指示身份验证结果 成功!

Unity 测试通过 Steam 登录 PlayFab