> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 玩家数据快速入门

> PlayFab 玩家数据快速入门逐步展示如何通过客户端和服务器 SDK 创建、读取和更新自定义玩家键值字段。

# 快速入门:设置和获取玩家数据

<Note>
  在 PlayFab API 中,函数名使用术语 **UserData**。在 **Game Manager** 中,此概念被描述为 **Player Data**。它们是相同的且可以互换。
</Note>

开始使用 PlayFab 玩家数据。本快速入门向你展示如何使用 Unity 中的 C# 以及使用 PlayFab CloudScript 设置和检索玩家数据。

玩家数据是适用于单个玩家或玩家群体(共享数据)的信息,由 PlayFab 存储为键值对 (KVP)。本文介绍了客户端 API 调用,可以从任何进程或上下文中安全调用。它还介绍了服务器 API 调用,这些调用*仅*应从你控制的专用服务器进程或经过精心保护的 CloudScript 调用中进行。服务器 API 需要你的开发密钥。该密钥不应提供给客户端或与客户端一起发布。

## 要求

* 一个 [PlayFab 开发者帐户](https://developer.playfab.com)。
* 已安装的 Unity 编辑器副本。要通过 Unity Hub 安装个人使用的 Unity,或安装专业使用的 Unity+,请参阅[下载 Unity](https://unity3d.com/get-unity/download)。

<Note>
  PlayFab Unity3D SDK 支持 Unity 编辑器版本 5.3(2015 年 12 月发布)及更高版本。
</Note>

* Unity 项目可以是:
  * 一个全新的项目。有关更多信息,请参阅[首次启动 Unity](https://docs.unity3d.com/550/Documentation/Manual/GettingStarted.html)。
  * 一个引导式教程项目。有关更多信息,请参阅[Unity 入门](https://learn.unity.com/)。
  * 一个现有项目。
* PlayFab Unity3D SDK。

有关设置 PlayFab Unity3D SDK 的信息,请参阅[快速入门:Unity 中 C# 的 PlayFab 客户端库](/services/playfab/sdks/unity3d/quickstart)一文。本文确保你拥有 PlayFab 帐户并正确配置了 Unity3D SDK。

## 关于代码示例

本文中的 C# 示例是为 Unity SDK 编写的。Unity SDK 使用事件驱动模型来处理非同步任务。若要使用 C# SDK 运行示例代码,必须修改代码以使用 async Task 模型。需要修改的方法在签名中的方法名末尾附加了 Async。例如,Unity SDK 中的 SetObject 在 C# SDK 中变为 SetObjectAsync。有关更多信息,请参阅[使用 async 和 await 的异步编程](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/)。

尽管你可以使用现有的 Unity 项目,但本快速入门假设你使用的是完成[快速入门:Unity 中 C# 的 PlayFab 客户端库](/services/playfab/sdks/unity3d/quickstart)时创建的示例。

## Game Manager 中的玩家数据

你可以随时通过 Game Manager 执行以下步骤来获取和设置玩家数据。

* 打开 **Game Manager**。如果你不熟悉它,请参阅 [Game Manager 快速入门](/services/playfab/live-service-management/gamemanager/quickstart)。
* 选择 **Players** 选项卡。
* 选择**玩家**的名称以访问 **Players Account** 选项卡。
* 选择 **Player Data** 选项卡以查看其数据。

## 添加设置玩家数据和检索玩家数据的方法

1. 在 Unity 编辑器中,打开你的示例项目。

2. 在 **Project** 窗口中,打开 **Assets** > **Scripts**,然后打开 PlayFabLogin 脚本。

3. 在 Visual Studio 中,在 using 语句中添加以下内容:

   `using System.Collections.Generic;`

4. 若要设置玩家数据,请向 `PlayFabLogin` 类添加 `SetUserData` 方法。`SetUserData` 使用 [UpdateUserData](xref:titleid.playfabapi.com.client.playerdatamanagement.updateuserdata) 方法为已登录的玩家创建或更新玩家数据。

   该方法创建(或更新,如果键值对 (KVPS) 已存在)键为 `Ancestor` 值为 `Arthur`,以及键为 `Successor` 值为 `Fred` 的 KVP。

   ```csharp theme={null}
   void SetUserData() {
       PlayFabClientAPI.UpdateUserData(new UpdateUserDataRequest() {
           Data = new Dictionary<string, string>() {
               {"Ancestor", "Arthur"},
               {"Successor", "Fred"}
           }
       },
       result => Debug.Log("Successfully updated user data"),
       error => {
           Debug.Log("Got error setting user data Ancestor to Arthur");
           Debug.Log(error.GenerateErrorReport());
       });
   }
   ```

5. 若要获取玩家数据,请向 `PlayFabLogin` 类添加 `GetUserData` 方法。`SetUserData` 使用 [GetUserData](xref:titleid.playfabapi.com.client.playerdatamanagement.getuserdata) 方法检索指定玩家的玩家数据。

   ```csharp theme={null}
   void GetUserData(string myPlayFabId) {
       PlayFabClientAPI.GetUserData(new GetUserDataRequest() {
           PlayFabId = myPlayFabId,
           Keys = null
       }, result => {
           Debug.Log("Got user data:");
           if (result.Data == null || !result.Data.ContainsKey("Ancestor")) Debug.Log("No Ancestor");
           else Debug.Log("Ancestor: "+result.Data["Ancestor"].Value);
       }, (error) => {
           Debug.Log("Got error retrieving user data:");
           Debug.Log(error.GenerateErrorReport());
       });
   }
   ```

6. 在 `OnLoginSuccess` 方法中调用 `SetUserData` 和 `GetUserData`。

   ```csharp theme={null}
   private void OnLoginSuccess(LoginResult result) {
       Debug.Log("Congratulations, you made your first successful API call!");
       SetUserData();
       GetUserData(result.PlayFabId);
   }
   ```

7. 保存文件。

## 运行示例

在 Unity 编辑器中,选择播放按钮。成功后,调用结果将显示在控制台窗口中。

## 另请参阅

* [如何设置内部玩家数据](/services/playfab/player-progression/player-data/how-to-set-internal-player-data)
* [如何获取内部玩家数据](/services/playfab/player-progression/player-data/how-to-get-internal-player-data)
* [如何设置只读玩家数据](/services/playfab/player-progression/player-data/how-to-set-read-only-player-data)
* [如何获取只读玩家数据](/services/playfab/player-progression/player-data/how-to-get-read-only-player-data)
* [如何从 CloudScript 修改只读或内部玩家数据](/services/playfab/player-progression/player-data/how-to-modify-read-only-internal-player-data)
* [Title Data 快速入门](/services/playfab/live-service-management/game-configuration/titledata/quickstart)
* [使用发布者数据](/services/playfab/live-service-management/game-configuration/titledata/using-publisher-data)
* [CloudScript 快速入门](/services/playfab/live-service-management/service-gateway/automation/cloudscript/quickstart)


## Related topics

- [Title Data 快速入门](/zh-CN/services/playfab/live-service-management/game-configuration/titledata/quickstart.md)
- [PlayFab 玩家进程文档](/zh-CN/services/playfab/player-progression/index.md)
- [统计数据快速入门](/zh-CN/services/playfab/player-progression/statistics/quickstart-statistics.md)
- [玩家库存快速入门](/zh-CN/services/playfab/economy-monetization/economy-v2/inventory/quickstart.md)
- [数据连接快速入门](/zh-CN/services/playfab/data-analytics/export-data/data-connection-quickstart.md)
