# 主要概念

> Understand key concepts to use Unity Gaming Services effectively.

在开始之前，请花几分钟了解 Unity Gaming Services（Unity 游戏服务）的一些主要概念。

## 服务器端游戏系统##server-side-game-systems

对于实时游戏，特别是多人游戏，在一个固定位置管理玩家数据非常重要。这种情况下不再通过每个玩家的设备来管理相应玩家的数据，而是通过一个与所有玩家设备进行通信的中央服务器来处理重要的游戏决策。这有助于减少作弊手段，这些手段可能会让玩家获得不公平优势，或获取他们原本需要购买或赚取的资源。同样，为了确保实时活动和竞技功能对所有玩家公平，您的游戏应该在云端管理数据和决策。

Unity Gaming Services（Unity 游戏服务）可让您：

* 使用 Cloud Save 服务将玩家数据安全地保存在云端。
* 使用 Economy 和 Cloud Code 服务在云中运行经济逻辑和游戏逻辑。

## 异步代码##asynchronous-code

与任何在线服务一样，Unity Gaming Services（Unity 游戏服务）全部基于异步操作。这意味着客户端对服务的请求不会为等待响应而停止游戏。当服务请求在后台发生时，游戏过程、UI 和动画可以继续执行。

为此，Unity Gaming Services（Unity 游戏服务）依赖于基于任务的异步模式 (TAP)，这使得用 C# 编写异步代码比较容易。如果您已经熟悉在 Unity 中编写代码，那么您可能了解可用于异步逻辑的协程。虽然协程对于控制前台发生的事情仍然有用，但异步任务更适合管理后台发生的事情，例如 Web 请求。

在整个 UGS 文档中，您会遇到 `async` 和 `await` 关键字。`async` 方法返回一个表示正在进行的过程的 [`Task`](https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task)。`await` 关键字告诉调用方等到被调用的 `async` 方法完成后再继续。

例如，要更新玩家的货币数据，您可能具有类似以下代码：

```cs
async Task RefreshPlayerWallet()
{
	// Use an animation to show the player something is happening.
	waitIndicator.gameObject.SetActive(true);

	// Download this player's currency statuses from UGS;
	// this asynchronous task won't interrupt the animation.
	var newWalletData = await EconomyManager.RefreshWalletData();

	// Once you have the downloaded data, update your UI.
	walletView.Refresh(newWalletData);

	waitIndicator.gameObject.SetActive(false);
}
```

如需了解更多信息，请参阅 Microsoft 的[异步编程](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/)概念指南。

## SDK API 与 REST API##sdk-apis-versus-rest-apis

有两种方法以编程方式访问 Unity Gaming Services（Unity 游戏服务）：

* SDK（客户端）API
* REST (Web) API

### 客户端 API##client-apis

如果您打算将 Unity Gaming Services（Unity 游戏服务）与 Unity 游戏引擎一起使用，Unity 建议为您的项目使用客户端 API。

客户端 API 让您可以更轻松地在 Unity 编辑器上下文中使用受支持的语言 (C#) 访问 Unity Gaming Services（Unity 游戏服务）API。Unity 开发者可以使用 [Unity 包](https://docs.unity3d.com/Manual/upm-ui.html)访问所有服务的功能。这些 SDK 直接安装到您的 Unity 项目中并提供您需要的所有 C# API 库。客户端 API 简化了您的工作流程并显著减少了您需要编写的代码量。

### Web API##web-apis

非 Unity 开发者可以通过 Web 终端或 [REST API](https://restfulapi.net/) 访问 Unity Gaming Services（Unity 游戏服务）API。REST API 提供更大的灵活性，让您可以利用喜欢的语言和游戏引擎来自动执行工作流程。

### 入门影响##onboarding-impact

无论是使用 SDK 还是 REST API，您都需要在 Unity Dashboard 上[创建一个项目](./getting-started.md#create-a-project-in-the-unity-dashboard)。但是，如果使用 REST API，[入门指南](./getting-started.md)中的后续步骤可能会略有不同。Unity 建议这些客户访问[服务 API](https://services.docs.unity.com/) 文档网站快速入门。
