> For the complete documentation index, see [llms.txt](/ja/llms.txt)


# 構成と選び方

relay・sync・stateMachine の違い、選び方、開発の流れ



GS2-Realtime には、ルームのサーバーが何をするかによって 3 つのサーバータイプがあります。このページでは、どれを選ぶかと、選んだ後に何を作るかを説明します。

## サーバータイプ {#execution}

| `serverType` | サーバーがすること | ゲーム側で作るもの | 向いているゲーム |
| --- | --- | --- | --- |
| `relay` | メッセージを、指定したプレイヤーや全員へ中継する | メッセージの形式と、受け取った後の処理 | 独自の通信を自由に設計したい |
| `sync` | オブジェクトの状態を全員に配信し、誰が書き換えられるかを管理する | 表示用の Prefab と、操作する処理 | 位置や状態を共有したい |
| `stateMachine` | `sync` の機能に加え、登録したルールでオブジェクトを生成・更新する | `sync` の内容に加え、C# で書くルール | 敵の行動や HP、バトルの進行をサーバーで決めたい |

`stateMachine` では、HP の計算や攻撃の可否をサーバーが決めるので、クライアントの改造で結果を書き換えられません。複数のプレイヤーが同時に操作しても、サーバーが順番に処理するので、全員に同じ結果が表示されます。

## 選び方 {#availability}

Realtime のネームスペース設定の `serverType` で選びます。

- 独自のメッセージを参加者に届けたいだけなら、`relay` を選びます。
- オブジェクトの位置や状態を共有したいなら、`sync` を選びます。
- それに加えて、敵の行動やゲームの進行をサーバーで管理したいなら、`stateMachine` を選びます。

`relay` の使い方は [GS2-Realtime の紹介]()を参照してください。

## stateMachine の開発の流れ {#workflow}

| 手順 | 作るもの | 説明するページ |
| --- | --- | --- |
| 1. ルールを書く | 敵の生成、操作の検証、時間経過の処理を書いた C# | [ルーム定義リファレンス]() |
| 2. 生成する | ルール（GSL）と、Unity 用の同期スキーマ | [生成と登録](#deployment) |
| 3. 登録する | GS2-StateMachine への登録と、Realtime のネームスペース設定 | [生成と登録](#deployment) |
| 4. Unity で表示する | Prefab、NetworkWorld、接続の処理 | [Unity クライアント]() |

C# で書いたルールは GSL に変換され、ルームの中で実行されます。C# のコードがそのままサーバーで動くわけではないので、使える C# の範囲に決まりがあります。

## ページの案内 {#guides}

| やりたいこと | ページ |
| --- | --- |
| まず一通り動かしてみたい | [チュートリアル: サーバーで HP を管理する敵を作る]() |
| Unity での設定や API を調べたい | [Unity クライアント]() |
| ルールの書き方や上限値を調べたい | [ルーム定義リファレンス]() |
| C# の記述形式（状態、Step、使える構文）を調べたい | [C# 定義リファレンス]() |
| Photon（PUN2）から移行したい | [Photon からの移行ガイド]() |



