教程:获取玩家档案
本教程介绍如何:
- 创建具有显示名称的用户
- 进行玩家档案通话
- 获取玩家创建时间和上次登录时间
- 配置游戏的玩家个人资料视图约束
- 通过登录操作获取玩家档案
要求
- 一个 PlayFab 开发者帐户。
- Unity 编辑器的已安装副本。 若要通过 Unity Hub 或 Unity+ 安装 Unity 以供个人使用,请参阅下载 Unity。
注意
PlayFab Unity3D SDK 支持 Unity 编辑器版本 5.3(2015 年 12 月发布)及更高版本。
- Unity 项目 * 可以是以下任一项:
- 全新的项目。 有关详细信息,请参阅 首次启动 Unity。
- 引导式教程项目。 有关详细信息,请参阅 Unity 入门。
- 一个现有项目。
- PlayFab Unity3D SDK。
在学习本教程之前,您需要掌握为作品创建玩家的基础知识,以便对玩家执行 GetPlayerProfile
。
如果不熟悉 Game Manager,请先阅读 Game Manager 快速入门(因为我们需要在 Game Manager 中配置档案约束)。
本文中的 C# 示例是为 Unity SDK 编写的。 Unity SDK 使用事件驱动模型来处理非同步任务。 若要使用标准 C# 或 Xamarin C# SDK 运行示例代码,必须修改代码以使用异步任务模型。 必须修改的方法在签名中将异步附加到方法名称。 例如,Unity SDK 中的 SetObject 在标准 C# SDK 中变为 SetObjectAsync。 对此,请参阅 使用 async 和 await 进行异步编程 。
创建具有显示名称的用户
第一步是创建玩家并向用户添加显示名称。 此示例将创建一个显示名称为 UnicornTossMaster
的新用户。
void CreatePlayerAndUpdateDisplayName() {
PlayFabClientAPI.LoginWithCustomID( new LoginWithCustomIDRequest {
CustomId = "PlayFabGetPlayerProfileCustomId",
CreateAccount = true
}, result => {
Debug.Log("Successfully logged in a player with PlayFabId: " + result.PlayFabId);
UpdateDisplayName();
}, error => Debug.LogError(error.GenerateErrorReport()));
}
void UpdateDisplayName() {
PlayFabClientAPI.UpdateUserTitleDisplayName( new UpdateUserTitleDisplayNameRequest {
DisplayName = "UnicornTossMaster"
}, result => {
Debug.Log("The player's display name is now: " + result.DisplayName);
}, error => Debug.LogError(error.GenerateErrorReport()));
}
控制台输出应显示:
Successfully logged in a player with PlayFabId: SOME_PLAYFAB_ID
The player's display name is now: UnicornTossMaster
进行玩家档案通话
下一步是为玩家 usin 创建一个非常基本的配置文件
下面的示例使用基本 GetPlayerProfile 调用。
void GetPlayerProfile(string playFabId) {
PlayFabClientAPI.GetPlayerProfile( new GetPlayerProfileRequest() {
PlayFabId = playFabId,
ProfileConstraints = new PlayerProfileViewConstraints() {
ShowDisplayName = true
}
},
result => Debug.Log("The player's DisplayName profile data is: " + result.PlayerProfile.DisplayName),
error => Debug.LogError(error.GenerateErrorReport()));
}
响应包括 PlayerProfileModel 对象,其中包含玩家的显示名称 UnicornTossMaster
。
获取玩家创建时间和上次登录时间
在 PlayerProfileModel 对象中,有大量关于玩家的数据。 在上一步中,我们发出了 GetPlayerProfile
,收到的响应仅包含显示名称信息。
下一步是获取玩家更多 的档案数据。 为此,请在 PlayerProfileViewConstraints请求参数中使用其他字段调用GetPlayerProfile
。
下面的 C# 示例修改了第 2 步中的 GetPlayerProfile
方法,并通过在 ProfileConstraints 中设置 Created
和 LastLogin
字段的标志来调用 GetPlayerProfile
请求这些信息。
注意
此步骤中的调用将失败!!!
void CreatePlayerAndUpdateDisplayName(string playFabId) {
PlayFabClientAPI.GetPlayerProfile( new GetPlayerProfileRequest() {
PlayFabId = playFabId,
ProfileConstraints = new PlayerProfileViewConstraints {
ShowDisplayName = true,
ShowCreated = true,
ShowLastLogin = true
}
},
result => Debug.Log("The player's profile Created date is: " + result.PlayerProfile.Created),
error => Debug.LogError(error.GenerateErrorReport()));
}
如果此时运行此示例代码,则会返回 Error Code 1303
的错误。
RequestViewConstraintParamsNotAllowed
,以及一条错误消息,指出存在与游戏当前设置的约束的 JSON 输出 Invalid view constraints
。
发生此错误的原因是你尚未配置在游戏的配置文件约束设置中显示 Created
和 LastLogin
的功能。
配置游戏的玩家个人资料视图约束
若要在调用 GetPlayerProfile API 时获取更多数据,需要配置对可用数据的约束。 这些设置位于 Game Manager 中的游戏设置中。
默认情况下,“允许客户端访问配置文件属性”:仅启用显示名称,允许检索显示名称值。
若要为游戏配置其他约束,请执行以下操作:
- 在 Game Manager中,选择您的游戏。
- 选择左上角的齿轮图标,然后选择标题设置。
- 选择 Client Profile Options 选项卡。
- 若要在 ProfileConstraints中启用创建的和LastLogin,请检查创建日期和上次登录时间,然后选择保存客户端配置文件选项。
现在,当你调用 1CreatePlayerAndUpdateDisplayName
它返回 PlayerProfileModel 对象,其中包含用户创建时间、上次登录时间和 UnicornTossMaster
的显示名称的数据。
通过登录操作获取玩家档案
在大多数情况下,你希望在玩家登录后立即检索玩家个人资料数据。 PlayFab API 允许你将登录调用和调用合并到单个调用中,以检索玩家档案。
以下示例显示如何通过登录请求获取档案信息,并使用 LoginWithCustomId
作为示例。
注意
这适用于所有 登录机制。
void CreatePlayerAndUpdateDisplayName(string customId) {
PlayFabClientAPI.LoginWithCustomID( new LoginWithCustomIDRequest() {
CustomId = customId,
// Define info request parameters
InfoRequestParameters = new GetPlayerCombinedInfoRequestParams() {
// And make sure PlayerProfile is included
GetPlayerProfile = true,
// Define rules for PlayerProfile request
ProfileConstraints = new PlayerProfileViewConstraints() {
// And make sure that both AvatarUrl and LastLogin are included.
ShowAvatarUrl = true,
ShowLastLogin = true,
}
}
},
result =>
{
// Extract the data you have requested
var avatarUrl = result.InfoResultPayload.PlayerProfile.AvatarUrl;
},
error => Debug.LogError(error.GenerateErrorReport()));
}