spacetimedb-client-c-sharp について
SpacetimeDB を使った C# および Unity クライアント実装のスキルで、バインディング生成、接続、サブスクリプション、実行時のルールを扱います。プロジェクト生成の API を使い、Unity のライフサイクルコードと生成コードを分離する方法を示します。
主な機能
- 01C# クライアントバインディングを生成
- 02接続とサブスクリプションを設定
- 03購読した行の読み取りとイベント処理
- 04Reducer の呼び出しとコールバック登録
- 05Unity の実行時・スレッド規則を順守
活用シーン
- 01SpacetimeDB の C# クライアントを構築
- 02Unity プロジェクトをデータベースに接続
- 03テーブル更新の読み取りと Reducer の呼び出し
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ danmossa/ spacetimedb-skills --skill spacetimedb-client-c-sharpインストール後、Claude Code で/spacetimedb-client-c-sharpを入力して読み込まれたか確認します。
同梱ファイルreferences/clients-c-sharp.md
詳細
C# および Unity クライアントの実装にこのスキルを使用します。
C# の基本パターン
C# バインディングを生成し、ユーザーのプロジェクトで生成された DbConnection、RemoteTables、RemoteReducers の名前を使用します。
spacetime generate --lang csharp --out-dir client/module_bindings --module-path spacetimedb
var conn = DbConnection.Builder()
.WithUri(new Uri("ws://localhost:3000"))
.WithDatabaseName("my-database")
.OnConnect((conn, identity, token) =>
{
conn.SubscriptionBuilder().SubscribeToAllTables();
})
.OnConnectError((ctx, err) => Log.Error(err.ToString()))
.OnDisconnect((ctx, err) => Log.Info("Disconnected"))
.Build();
実行時のルール
- メインループまたは Unity の更新処理から
conn.FrameTick()を呼び出します。そうしないと、コールバックとキャッシュの更新が適用されません。 - メインスレッドのコードが
conn.Dbを読み取っている間、バックグラウンドスレッドでFrameTick()を実行しないでください。 conn.Db.<Table>.Iter()、Count、および生成されたユニークハンドル/インデックスハンドルを通じて、購読中の行を読み取ります。OnInsert、OnDelete、OnUpdateでテーブルイベントを登録します。OnUpdateには主キーが必要です。conn.Reducers.<ReducerName>(...)でリデューサーを呼び出し、必要に応じて生成されたリデューサーイベントを登録します。- Unity のライフサイクルコードは MonoBehaviour またはサービスクラスに記述し、生成されたバインディングは編集しないでください。
リファレンスマップ
| 必要なもの | 開く |
|---|---|
| C# SDK API | references/clients-c-sharp.md |
ガイダンス
- 利用できる場合は、ユーザーのプロジェクトで生成された C# バインディング名を使用します。
- プロジェクトですでに統合されている場合を除き、Unity のライフサイクルコードは生成されたバインディングコードと分離します。
- Unity のチュートリアル全般に関する作業は spacetimedb-tutorials に振り分けます。
コメント
Markdown 対応