# 主要概念

> Understand key concepts to use Unity Gaming Services effectively.

使用を始める前に、Unity Gaming Services の基盤となるいくつかの主要概念を理解しておきましょう。

## サーバー側ゲームシステム##server-side-game-systems

ライブゲーム、特にマルチプレイヤー形式のライブゲームでは、単一の場所でプレイヤーデータを管理できることが重要です。各プレイヤーのデバイスでそのプレイヤーのデータを管理するのではなく、すべてのプレイヤーデバイスと通信する中央サーバーで、ゲームに関する重要な決定を処理します。これにより、プレイヤーが不当に利益を得たり、本来は購入または獲得する必要があるリソースを取得したりできるチート行為を抑制できます。同様に、ライブイベントや競争機能をすべてのプレイヤーに公平に提供するには、ゲームによりクラウド内でデータや意思決定を管理する必要があります。

Unity Gaming Services では以下を行えます。

* Cloud Save サービスを使用して、プレイヤーデータをクラウド内で安全に保持する。
* Economy サービスおよび Cloud Code サービスを使用して、クラウド内で経済ロジックとゲームロジックを実行する。

## 非同期コード##asynchronous-code

他のオンラインサービスと同様に、Unity Gaming Services はすべて非同期操作に基づいています。したがって、クライアントからサービスへのリクエストが行われた場合でも、ゲームが応答を待って停止することはありません。サービスリクエストはバックグラウンドで処理され、その間もゲームプレイ、UI、およびアニメーションは継続できます。

このため、Unity Gaming Services ではタスクベース非同期パターン (TAP) を使用しており、C# で比較的容易に非同期コードを記述できます。Unity のコード作成に慣れている方であれば、非同期ロジックに使用できるコルーチンもご存じでしょう。コルーチンは、フォアグラウンドで行われている処理の制御には役立ちますが、バックグラウンドで行われる処理 (ウェブリクエストなど) を管理するには非同期タスクの方が適しています。

この 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 にプログラムでアクセスする方法は次の 2 つです。

* SDK (クライアント) API
* REST (ウェブ) API

### クライアント API##client-apis

Unity ゲームエンジンで Unity Gaming Services を使用する場合、プロジェクトにクライアント API を使用することをお勧めします。

クライアント API を使用すると、Unity エディターのコンテキスト内で、サポート対象言語 (C#) から Unity Gaming Services API にアクセスしやすくなります。Unity 開発者は、[Unity パッケージ](https://docs.unity3d.com/Manual/upm-ui.html) で、サービスのすべての機能にアクセスできます。これらの SDK は Unity プロジェクトに直接インストールされ、必要な C# API ライブラリすべてを提供します。クライアント API により、ワークフローを簡略化し、作成する必要があるコードの量を大幅に抑えられます。

### ウェブ API##web-apis

Made with Unity 以外の開発者は、ウェブエンドポイントを介した Unity Gaming Services API、つまり [REST API](https://restfulapi.net/) にアクセスできます。REST API はより柔軟性があり、開発者は好みの言語やゲームエンジンを使用してワークフローを自動化することができます。

### オンボーディングへの影響##onboarding-impact

SDK API と REST API のどちらを使用する場合でも、Unity Dashboard で [プロジェクトを作成](./getting-started.md#create-a-project-in-the-unity-dashboard) する必要があります。ただし、REST API を使用する場合、[使用の準備ガイド](./getting-started.md) のその後の手順が少し異なる可能性があります。これに該当するお客様は、オンボーディングの際に、[サービス API ドキュメントのウェブサイト](https://services.docs.unity.com/) を参照することをお勧めします。
