使用 Steam 和 Unity 设置 PlayFab 身份验证
本教程指导您完成通过 SteamWorks 和 Unity,使用 Steam 登录 PlayFab 的步骤。
先决条件
开始前,您应具有:
- 一个 Unity 项目,其中导入了 PlayFab SDK 并具有已配置的游戏 ID。
- 具备以下条件的 Steam 应用程序:
- 已设置了 AppID。 通过 Steam Direct(以前为 Greenlight)过程获取 AppID。
- Steam 发行商网页 API 密钥。 按照 Steamworks 文档中的创建发行商网页 API 密钥生成发行商密钥。
- 熟悉登录基础知识和最佳实践。
设置 PlayFab 游戏
若要启用对 Steam 授权的支持,PlayFab 要求启用 Steam 加载项。
转到 Game Manager 页:
- 选择 加载项 菜单项。
- 在可用 加载项列表中,找到 Steam 并选择标题链接:
- 输入 应用 ID。
- 输入 Web API 密钥。
- 然后选择 安装 Steam。
为 Steam 集成设置 PlayFab 游戏到此结束。
设置 Unity 项目
首先从版本页面下载 Steamworks.NET 的最新版本。
- 获取 Unity 程序包的发行版本,然后将它导入项目中。
- 导入程序包后,关闭 Unity。
- 导航到 Project 根文件夹。
- 找到 steam_appid.txt 文件。
- 打开该文件并将 App ID 值替换为自己的 ID。
重新打开 Unity 并创建新场景。
在该场景中,创建名为 Steam的新 gameobject:
- 将 SteamManager 组件添加到 gameobject。 此组件是 Steamworks.Net 的一部分。
- 创建 SteamScript 组件并将其添加到 gameobject。
下面的示例演示 SteamScript
组件的代码。
// 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());
}
}
测试
可以直接在编辑器中进行测试:
- 运行场景并选择 登录 按钮。
- 控制台消息应在片刻后显示,指示身份验证结果 成功!。