C# 定義の生成設定と登録
C# 定義を GSL と Unity 用コードへ変換するときの設定を説明します。定義そのものの書式は C# 定義リファレンス、Editor の基本操作はチュートリアルを参照してください。
| 調べたいこと | 参照先 |
|---|---|
| ソース・生成先・実行先を指定する | project.json |
| SDK の報酬リクエスト型を参照する | SDK DLL の参照 |
| 報酬 enum の付与先を指定する | bindings.json |
| 登録するファイルを確認する | 生成物と GSL 登録 |
project.json
C# 定義の共通の生成設定を保持する JSON ファイルです。相対パスはこのファイルの場所を基準に解決します。
{
"format": 1,
"source": "Rules",
"output": "../../Assets/Generated/Counter",
"namespace": "Generated.Counter",
"hostProfile": "LocalReplayV1"
}この例は GameRules/Counter/project.json に置く場合の設定です。
| キー | 必須・既定値 | 内容 |
|---|---|---|
format | 必須、1 | 設定ファイルの形式 |
source | 必須 | 定義の C# を含むフォルダー |
output | 必須 | 生成先フォルダー |
namespace | 省略時 Generated | 生成する Session・データ型の名前空間 |
hostProfile | 省略時 LocalReplayV1 | 実行先。下表参照 |
bindings | 省略可能 | enum 方式の報酬対応表 JSON へのパス |
references | 省略時なし | SDK DLL などの参照先パスの配列 |
ソースと生成先は同じフォルダー、または互いの配下にできません。コンパイラが管理していない既存の出力フォルダーは上書きしません。ひな形の GameRules/Counter/Contract/ には、IDE での補完・型検査に使うコードを生成します。この Contract フォルダーを source に含めないでください。未知の設定キーはエラーです。
| hostProfile | 実行方式 | 使用できる実行環境 API |
|---|---|---|
LocalReplayV1 | クライアントで実行し、サーバーで履歴を再生・検証 | GameRandom、GameRewards |
RealtimeRoomV1 | Realtime のルーム内で実行 | Room API。詳細は Realtime 側を参照 |
ホストプロファイルは実行先の指定です。StateMachine の投機的実行と Realtime のルーム内実行では、クライアント API と生成物が異なります。Realtime 用の設定・同期スキーマ・配布ファイルは ルーム定義リファレンスの生成と登録を参照してください。
Unity Editor からの生成
GS2 > Local State Machine > Generate from C# から生成します。新規作成では設定が自動で作られるため、基本操作はチュートリアルを参照してください。
Existing definition の Project に設定した project.json は生成ごとに読み直します。Reload settings は設定をウィンドウへ再読込します。Generation settings の欄は、Project 選択中には読み取り専用です。変更は JSON に保存します。Project を指定しない手動生成の場合は、欄へ直接入力できます。
Editor からの生成に外部の .NET SDK や Python は不要です。生成機能は Unity 2021.2 以降が対象です。SDK 型の参照方法は SDK DLL の参照を参照してください。
CLI からの生成
CLI を使用する場合は .NET 8 SDK を用意します。次は SDK ソースのルートから実行する例です。
dotnet run --project unity/Tools/LocalStateMachineKit/Compiler -- \
--project unity/GameRules/Counter/project.json| 指定 | 用途 |
|---|---|
--project PROJECT_JSON | 設定ファイルから生成。他の生成設定とは併用不可 |
--init DIRECTORY --name NAME --output DIRECTORY | 定義のひな形と設定を作成 |
--build SOURCE --output DIRECTORY | ソースフォルダーから生成 |
--namespace NAME | init / build 時の生成名前空間 |
--bindings JSON / --host-profile PROFILE | build 時の報酬対応表と実行先 |
--reference DLL | build 時の参照 DLL。複数指定可能 |
SDK DLL の参照
SDK のリクエスト型で報酬を記述する場合、生成時に実際の SDK DLL を参照します。
- Unity Editor:導入済み SDK を自動で参照します。
- CLI:project.json の
referencesに DLL のパスを指定するか、--buildに--reference DLLを渡します。 - 外部 IDE:補完・型検査には、定義側の csproj に SDK DLL の
<Reference>/<HintPath>を指定します。生成時の設定とは別です。
次は Unity プロジェクトの GameRules/Counter/project.json から DLL を指定する例です。DLL の場所は導入方法に合わせて変更してください。
"references": ["../../Assets/Plugins/Gs2.dll"]これは project.json に追加するキーの例であり、設定ファイル全体ではありません。相対パスは project.json の場所を基準に解決します。
bindings.json
Grant(Reward.Parts, amount) のように報酬 enum を使う場合に、Inventory の SimpleItem の付与先を指定します。SDK リクエストを Grant に直接渡す方式では不要です。
{
"Parts": {
"namespaceName": "rewards",
"inventoryName": "bag",
"itemName": "parts"
}
}キーは報酬 enum のメンバー名です。各項目に namespaceName・inventoryName・itemName の三つの文字列を指定します。使用した報酬 ID の設定が不足すると生成に失敗します。
このファイルを参照するには、project.json に "bindings": "bindings.json" を指定します。相対パスは project.json の場所が基準です。
生成物と GSL 登録
以下は StateMachine の投機的実行用の生成物です。Realtime 用の生成物は ルーム定義リファレンスを参照してください。定義の登録先は、どちらも GS2-StateMachine の StateMachineMaster です。
| ファイル | 用途 |
|---|---|
machine.gsl | LocalReplayV1 のサーバー登録用定義 |
<ルールクラス名>Session.cs | LocalReplayV1 の Unity 用操作・状態参照コード |
source-map.json | 生成された位置と元の C# の位置を対応付ける調査用ファイル |
このほか IR、Lua などの調査用ファイルを生成します。生成物は直接編集せず、定義から再生成します。再生成時は対応する既存の .meta を保持します。
GSL の Task の Payload に Lua が入ります。updateStateMachineMaster API には、GSL ファイルの内容を payload として指定します。デプロイ用の StateMachineMasterでも同じ内容を指定できます。mainStateMachineName はルールクラス名です。ZIP をそのまま登録 API へ渡すのではなく、GSL の文字列を使用します。
source map は、生成物の位置から元の C# の位置を調べるための開発用ファイルで、サーバー登録には使用しません。manifest や runtime.json も同様です。
定義を更新したときの Session の扱いは OpenAsync / OpenFuture を参照してください。