stream-unity について
stream-unityは、Unity Engine向けのStream ChatおよびVideo SDKのドキュメントを案内するスキルです。チャットや通話を組み込むUnity開発者向けに、製品、Unityのバージョン、対象プラットフォーム、機能の対応状況を確認し、関連資料とUnity固有の注意点を示します。
主な機能
- 01ChatとVideoのSDKを区別
- 02Unityのバージョンと対象プラットフォームを確認
- 03クライアント側の機能対応を確認
- 04関連ドキュメントを特定して取得
- 05Unityのビルドと統合時の注意点を提示
活用シーン
- 01UnityプロジェクトでVideoを使えるか確認
- 02ゲームにStream Chatを追加
- 03ビルド対象ごとのSDK制限を調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ getstream/ agent-skills --skill stream-unityインストール後、Claude Code で/stream-unityを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
docs-map.mdplatforms.mdRULES.mdsetup.mdui.md詳細
Stream Unity - Unity Engine 向けドキュメントオーケストレーター
チャットとビデオ。 Unity 向けの Stream Feeds SDK はありません(/activity-feeds/docs/unity と https://getstream.io/cli/docs/activity-feeds-unity.md はどちらも 404 です)。ユーザーから Unity でアクティビティフィードを使いたいと尋ねられた場合は、まずその旨を伝え、API を作り上げるのではなく、代替手段(バックエンドから利用する REST/サーバー API、またはコンパニオンアプリで使うプラットフォーム SDK)を案内してください。
これらは別々の SDK であり、共有されているものはほとんどありません。 リポジトリ、インストール方法、成熟度、対応プラットフォーム、ドキュメントの品質がそれぞれ異なります。統合クライアントはなく、共通の AuthCredentials 型もありません(StreamChat.Libs.Auth.AuthCredentials と StreamVideo.Libs.Auth.AuthCredentials は、別々のアセンブリに属する別個の型です)。一方にユーザーを接続しても、もう一方には接続されません。「Unity の通話アプリにチャットを追加したい」という要望は、たまたま API キーを共有する 2 つの統合として扱ってください。
| チャット | ビデオ | |
|---|---|---|
| リポジトリ | GetStream/stream-chat-unity(デフォルトブランチ develop) | GetStream/stream-video-unity(デフォルトブランチ main) |
| 最新版 | v5.7.0(安定版、5.x 系列) | 0.11.0(1.0 以前 - API 群はまだ変更されます) |
| インストール | GitHub Releases から .unitypackage を取得し、Assets/ にインポート | Git URL から UPM パッケージを取得 |
| エントリーポイント | StreamChatClient.CreateDefaultClient() -> IStreamChatClient | StreamVideoClient.CreateDefaultClient() -> IStreamVideoClient |
| 名前空間 | StreamChat.Core | StreamVideo.Core |
| プラットフォーム | WebGL を含む、Unity が対象とするすべてのプラットフォーム | Android(ARM64)、iOS、Windows x64、macOS、Linux。WebGL と UWP には非対応です |
| 事前構築済み UI | なし - サンプルプロジェクトであり、コンポーネントではありません | なし - サンプルプロジェクトであり、コンポーネントではありません |
| ドキュメントの網羅性 | 良好:ほぼすべてのページに実際の Unity C# コードがあります | 限定的:22 ページあり、リリース済みの機能のうち、ページがまったくないものもいくつかあります |
どちらの SDK にも、再利用可能な UI は含まれていません。 どちらも、インポートして内容を確認するサンプルプロジェクトを提供しており、配置するだけで使えるコンポーネントライブラリではありません。ユーザーのゲーム内のチャットバブル、チャンネル行、参加者タイル、通話ボタンは、すべて自分でコードを書く必要があります。画面の提供を約束する前にこの点を伝え、画面を作成する場合は ui.md を参照してください。
このスキルの役割はオーケストレーションです。製品、プラットフォーム、機能の対応状況を確認し、該当するドキュメントページに誘導して、最新の内容を取得して適用します。同時に、ドキュメントにはない Unity 固有の知識(クライアントに隠された DontDestroyOnLoad ランナー、トラックのバインド要件、IL2CPP のストリッピング、ビルドがデバイスで動作するかを左右するプレイヤー設定)も補います。
ルール(セッションごとに一度確認してください): RULES.md - 必須ルールと Unity の注意点です。コードを書く前に必ず読んでください。
ステップ 0:コードを書く前に、3 つのゲートを確認
ユーザーの発言と読み取り専用の調査から、3 つすべてを確認してください。どれかひとつでも「コードはこちらです」を「それはできません」に変える可能性があるため、どれも省略できません。また、後からランタイムエラーとして扱うものでもありません。
ゲート 1:製品(Unity 向けに提供されているか)
| 確認事項 | 回答 |
|---|---|
| チャット/メッセージング/ゲーム内テキストチャット | 対応しています。Chat SDK を使用します。 |
| ビデオ通話/音声通話/音声ルーム/ライブストリーミング配信 | 対応しています。Video SDK を使用します。 |
| 両方 | 2 つをインストールし、2 つのクライアントを作成して、2 回接続します。ひとつにまとめようとしないでください。 |
| アクティビティフィード/タイムライン/フォロー関係グラフ | Unity SDK はありません。 すぐにその旨を伝え、サーバー API の利用方法を案内してください。 |
| モデレーションの審査キュー/ダッシュボード UI | アプリの UI としては提供されていません。モデレーションの審査は Stream Dashboard で行われます。SDK が公開しているのは、フラグ付け、ミュート、禁止といったエンドユーザーの操作のみです。 |
Gate 2:Unity のバージョンとビルドターゲット(Video SDK が制約になります)
質問するのではなく、調査してください。
bash -c 'echo "=== UNITY VERSION ==="; cat ProjectSettings/ProjectVersion.txt 2>/dev/null; \
echo "=== UPM MANIFEST ==="; cat Packages/manifest.json 2>/dev/null; \
echo "=== STREAM CHAT PRESENT ==="; find . -maxdepth 5 -type d -name "StreamChat" -not -path "*/Library/*" 2>/dev/null; \
echo "=== STREAM VIDEO PRESENT ==="; grep -n "io.getstream.video" Packages/manifest.json 2>/dev/null; \
echo "=== SCRIPTING BACKEND / TARGET ==="; grep -nE "scriptingBackend|AndroidTargetArchitectures|apiCompatibilityLevel|managedStrippingLevel" ProjectSettings/ProjectSettings.asset 2>/dev/null | head -20'
| 状況 | 対応 |
|---|---|
| Unity 6 / 2023.1 / 2022.3 / 2021.3 / 2020.3 | どちらの SDK もサポートしています。 |
| Unity 2019.4 - 2020.2、Chat のみ | Chat はサポートしています(SDK では 2019.x をサポート対象としています)。Video はサポートしていません。パッケージで "unity": "2020.3" と宣言されており、WebRTC フォークも同じです。 |
| Unity 2019.x - 2020.2、Video を希望 | Video は利用不可です。 すぐに伝えてください。エディターをアップグレードするか、Chat のみでリリースしてください。 |
| ターゲットが WebGL、Video を希望 | 利用不可です。 Unity の WebRTC パッケージは WebGL をサポートしていないため、Video SDK もサポートしていません。Chat は WebGL で動作します。選択肢として、WebGL では Chat を使い、Video はブラウザーベースのクライアントを使うか、WebGL を対象から外すことを提案してください。 |
| ターゲットが Android、Video を希望 | ARM64 のみです。ARMv7 はサポートされていないため、無効にする必要があります。詳細は platforms.md を参照してください。 |
| ターゲットが UWP | Video はサポートされていません。 |
| ターゲットが コンソール | Chat のみとし、未検証として扱ってください。SDK はコンソールをサポートするとしていますが、コンソールごとのガイダンスは公開していません。 |
Unity 6 と Chat の組み合わせには、最低バージョンに関する重要な制約が 1 つあります。Chat v5.4.0 では、Unity 6000.0.x で発生する IL2CPP ビルドのクラッシュ(IL2CPP の vtable ビルダーでの KeyNotFoundException)が修正されました。Unity 6 では、Chat を v5.4.0 未満に固定しないでください。
Gate 3:機能のサポート(コンパイルエラーではなく、計画段階で対応できないと伝える)
Chat - v5.7.0 時点でクライアント側には未実装です。 次のいずれかが必要な場合は、コードを書く前に伝えてください。
- ゲストユーザーと匿名ユーザー(
ConnectGuestUser/ 匿名接続は存在しません)- これにより、一般的な読み取り専用の観戦者向けライブ配信パターンは実現できません - チャンネルのアーカイブ、チャンネルのピン留め(どちらもメンバーごとのフィールドであり、クライアント API はありません)
- 下書きメッセージ、メッセージのリマインダー、ブックマーク、位置情報の共有
- ユーザーのブロック(
BlockUser/UnblockUser/ ブロックしたユーザーの一覧) - オンデマンドのメッセージ翻訳(チャンネルでの自動翻訳は動作します)
- 接続時の
invisibleまたはカスタムステータスの設定(接続後のMarkInvisibleAsyncは動作します) - チャンネルごとの未読メンション数、専用エンドポイントを使用したリアクション、ウォッチャー、ピン留めされたメッセージのページネーション
- クライアントレベルでの単独ファイルアップロード(チャンネルレベルの
UploadFileAsync/UploadImageAsyncは動作します) - 投票の回答(テキストコメント)と投票数の照会
Video - 0.11.0 時点でクライアント側には未実装です。
- 自分の画面共有の公開。 リモート参加者の
ScreenShareTrackは受信できますが、Unity から画面共有を開始する API はありません。リポジトリの README にある機能一覧の「Screensharing」は、受信側を指しています。 - 着信/呼び出し中イベント全般。
call.ringは内部で処理され、外部には公開されません(ソースには//StreamTodo: expose CallRinging event?と記載されています)。ring: trueとAcceptAsync/RejectAsyncはありますが、着信があったことを知らせるクライアント側のシグナルはありません。独自のプッシュ通知処理が必要です。 - プッシュ通知デバイスの登録。
CreateDeviceAsyncはinternalAPI にのみ存在し、低レベルクライアントにはinternalインターフェースを通じてしかアクセスできません。デバイスはバックエンドから登録してください。 - 公開された通話状態マシン。
CallingStateは内部用です。client.CallStarted/CallLeaving/CallEndedとclient.ActiveCallを使用してください。 - Video 側のチャット連携、ディープリンク、ピクチャー・イン・ピクチャー、ノイズキャンセリング、文字起こしの制御、HLS/RTMP 視聴者 UI について、Unity のドキュメントページはありません。
GoLiveAsync/StopLiveAsync/StartHLS/StopHLS/StartRecordingAsync/StopRecordingAsyncはIStreamCallに実装されています。ドキュメントに記載がないだけで、存在しないわけではありません。インターフェース(以下の rung 2)を確認し、情報の入手元を明記してください。
どちらの SDK でも、サーバー側の機能はサーバー側に置いてください。通話タイプ、チャンネルタイプ、権限とロール、Webhook、プッシュ通知テンプレートとプロバイダー、録画/文字起こしの設定、データ保持、インポートが該当します。クライアントが API シークレットを保持することはありません。
ドキュメントの慣例と、製品ごとのカバレッジの実態
Stream のドキュメントページには、すべて Markdown 版があります。ページの URL の末尾の / を削除し、.md を追加してください。
https://getstream.io/chat/docs/unity/query-channels/ -> https://getstream.io/chat/docs/unity/query-channels.md
https://getstream.io/video/docs/unity/basics/quickstart/ -> https://getstream.io/video/docs/unity/basics/quickstart.md
常に .md 版を取得してください。クリーンな Markdown、コードそのまま、ページの装飾なしです。すべてのページを掲載したライブインデックスはこちらです。
| 製品 | ライブインデックス |
|---|---|
| Chat | https://getstream.io/cli/docs/chat-unity.md |
| Video | https://getstream.io/cli/docs/video-unity.md |
2 つのツリーはそれぞれ逆の方向で不足があるため、注意点は製品ごとに異なります。
Chat:コードは実在しますが、すべての C# ブロックが Unity C# とは限りません
Chat Unity ツリーはよく整備されています。53 ページのうち約 40 ページには実際の Unity コードタブがあり、機能がない場合も、通常はページにその旨が明記されています。
// This feature is not yet available in the Unity SDK.
唯一の落とし穴はフェンスのラベルです。どちらも C# と書かれているため、見落としやすい点に注意してください。 これらのページには、異なる 2 つの SDK が混在しています。
| フェンス | SDK | 使用しますか? |
|---|---|---|
```csharp label="Unity" | Unity クライアント SDK | はい。 そのままコピーしてください。 |
```csharp label="C#" | .NET サーバーサイド SDK(using GetStream;、new StreamClient(apiKey, apiSecret)、chat.SendMessageAsync(...)) | いいえ。 API シークレットが必要で、リリース済みのゲームでは実行できません。 |
label="C#" のスニペットが IStreamChannel に似ているのは偶然にすぎません。chat.SendMessageAsync("channel-type", "channel-id", request) は channel.SendNewMessageAsync(request) に十分似ているため、誤って貼り付けてしまいがちです。その結果、「クライアントに API シークレットを追加する」という修正をすることになりますが、これはまさに誤りです。完全にサーバーサイドの C# のみを扱うページ(archiving-channels、pinning-channels、location-sharing)には、Unity SDK にまったく存在しない機能が記載されています。Gate 3 を参照してください。サーバーサイドと Unity が混在するページ(send-message、query-channels、channel-members、moderation、message-delivery-and-read-status)には Unity の手順もあります。label="Unity" のブロックを使い、それ以外は無視してください。
message-delivery-and-read-status は最も顕著な例です。既読状態は完全に実装済みですが(channel.MarkChannelReadAsync、channel.Read、channel.MarkChannelAsUnreadAsync、message.MarkMessageAsLastReadAsync)、ページには Unity ブロックがまったくありません。API はサーバーサイドの C# ではなく、インターフェースを参照してください。
取得する前に知っておくべき、Chat ツリーに関するもう 2 つの事実:
- CLI インデックスは不完全です。 さらに 15 個のパスが
/chat/docs/unity/以下で解決されますが、プラットフォームまたは Node のドキュメントへ 301 リダイレクトされます(push-devices->/docs/platform/push-devices/、chat-permission-policies->/chat/docs/node/...、update-users->/docs/platform/users/)。また、それらに対応する/chat/docs/unity/<page>.mdは 404 になります。代わりに、リダイレクト先の.mdを取得してください。そこには Unity コードがないものと考えてください。docs-map.mdに実際の URL が記載されています。 - ドキュメント内のサンプルプロジェクトへのリンクは壊れています。 導入ページには
github.com/GetStream/stream-chat-unity/tree/main/...へのリンクがありますが、リポジトリにはmainブランチがありません。develop(またはバージョンタグ)を使用してください。
Video:コードは信頼できますが、ツリーの規模は小さいです
Video Unity の 22 ページはすべて Unity を前提とした C# で、サーバー SDK との混在も JavaScript もありません。問題は情報の不足です。IStreamCall ではその大半が利用可能ですが、ライブ配信の開始、バックステージ、HLS、RTMP、録画の制御、呼び出しのフロー、画面共有の受信を扱うページはありません。Video に関するリクエストに対応するページがないのは通常のことです。2 つ目の段階に進み、インターフェースを読んでください。
真実の参照元の優先順位
順番に確認してください。質問に答える最初の項目が見つかった時点で止め、使用した項目を明記してください。
| 項目 | 参照元 | 用途 |
|---|---|---|
| 1 | ページの**label="Unity"ブロック**(Chat)またはページのC#(Video)— docs-map.mdに該当するページが記載されています | 対象となるすべての情報。原文をそのままコピーします。 |
| 2 | プロジェクト内のSDKソース — Assets/.../StreamChat/Core/**およびLibrary/PackageCache/io.getstream.video*/Runtime/Core/**。ない場合はraw.githubusercontent.com/GetStream/<repo>/<tag>/... | 正確なシグネチャ、デフォルト値、null許容性、publicとinternalの区別。最終的な根拠です。 |
| 3 | 同梱ドキュメントのコードサンプル — Chat:Assets/Plugins/StreamChat/Samples/*.cs、Video:Packages/StreamVideo/DocsCodeSamples/** | ドキュメントページ内のスニペットのコンパイル済みバージョン。ページより明確な場合もよくあります。 |
| 4 | サンプルプロジェクト — Chat:Assets/Plugins/StreamChat/SampleProject/、Video:Packages/StreamVideo/Samples~/VideoChat/ | メッセージリストのプーリングや参加者ビューの生成など、エンドツーエンドの実際の構成です。 |
| 5 | 変更履歴 — Chat:Assets/Plugins/StreamChat/Changelog.txt、Video:CHANGELOG.md | ドキュメントに反映されていない動作や設定(RULES.mdを参照)。リリースノートより詳しい情報です。 |
プロジェクトで実際に使用しているバージョンを参照してください。ChatはAssets/にコピーされ、VideoはLibrary/PackageCache/に解決済みのため、どちらもすでにディスク上にあります。GitHubのdevelop/mainより、こちらを優先してください。
URLの根拠: docs-map.mdまたはこの会話中のライブインデックス取得から得たページURLのみを取得してください。記憶を頼りにドキュメントのパスを作らないでください。
ステップ1:依頼を分類する
各ゲートを通過したら、モードを選択します。
- 使い方/リファレンス(「チャンネルをクエリするには?」「
SetIncomingVideoEnabledは何をしますか?」など)→ ドキュメントの検索に進みます。セットアップや認証情報は不要です。 - 組み込み(「ゲームにチャットを追加して」「このプロジェクトにビデオ通話を追加して」など)→
setup.mdを実行してから、機能ごとにドキュメントの検索を行います。 - 新規プロジェクト(「Unityのチャットアプリを作って」など)→
setup.mdを実行してから、依頼された画面に絞ってドキュメントの検索を行います。Unityプロジェクトがない(ProjectSettings/ProjectVersion.txtがない)場合は、まずUnity Hubで作成するようユーザーに伝えてください。Unityプロジェクトのツリーを手作業で合成しようとしないでください。 - UI作業(「チャンネルリストを表示して」「参加者を描画して」「メッセージの吹き出しをスタイル設定して」「通話コントロールを追加して」など)→
ui.mdを実行します。どちらのSDKにもコンポーネントは含まれていないため、これは自分で書くコードです。ランブックには、プレハブ/プーリングのパターン、トラックのバインディング契約、トラックを使用しないセルフプレビューの方法が記載されています。 - ビルド/リリース/端末での実行(「Android向けにビルドして」「スマートフォンで映像が表示されないのはなぜ?」「IL2CPPビルドがクラッシュする」「iOS向けにパッケージ化して」など)→
platforms.mdを実行します。ここに記載されたプレイヤー設定は仕上げではなく、動作に不可欠です。設定しないとAndroidのVideoビルドではWebRTCが動作せず、iOSビルドではカメラの使用許可を取得できず、IL2CPPビルドではSDKのシリアライズ型がストリップされる可能性があります。 - バージョンのアップグレード/移行(「Chatを5.7に上げて」「4.xを使用しています」など)→ Chat 4.xから5.xへの移行は、列挙型から構造体への移行です。
docs-map.mdからmigration-guide-to-5x.mdを読みます。Videoには移行ガイドがありません。2つのバージョン間のCHANGELOG.mdを読み、1.0未満のSDKではマイナーバージョン間でもAPIが破壊的に変更される可能性があることを明確に伝えてください。
ステップ 2:ドキュメントを検索する(すべてのリクエストはここで終了します)
docs-map.mdを開きます。機能に該当する行を探してください。正確な.mdURL と、そのページに掲載されているコードの種類が記載されています。- 機能がマップにない場合は、製品のライブインデックスを取得して、そこから選びます。
- WebFetch で
.mdページを取得します。1 回のリクエストで最大 3 ページまでです。それ以上必要な場合は、ユーザーにインデックス URL を案内してください。 - Unity のコードをそのまま使用し、プロジェクトの
MonoBehaviourとシーン構成に合わせる部分だけを調整します。ページに Unity のコードブロックがない場合は、段階 2 に進み、インターフェースを読みます。 - 参照したものを明記してください:
Source: [Title](https://getstream.io/...)、またはソースコードを読んだ場合はSource: Assets/Plugins/StreamChat/Core/StatefulModels/IStreamChannel.cs。トレーニングデータだけを根拠に SDK の詳細を回答してはいけません。この会話で読んでいない場合は、今すぐ読むか、見つけられなかったと伝えてください。 - ベストプラクティスを適用してください。
QueryChannelsAsyncは 1 回だけ実行し、WebSocket に状態の鮮度を保たせます。画面に表示されている参加者にのみビデオをサブスクライブします。接続は 1 回だけ行います。RULES.mdの「Mindful API usage」を参照してください。
このスキルに含まれるもの
公式ドキュメントでは Unity のコードがある箇所の低レベルクライアントを十分に解説しているため、このスキルではその内容を繰り返しません。厳選したドキュメント以外の情報は次のとおりです。
| ファイル | 内容 |
|---|---|
RULES.md | 絶対に守るべきルールと、問題が表面化せずに失敗する Unity 特有の落とし穴です。各ルールはここで一度だけ説明されています。 |
setup.md | 両 SDK のバージョン固定インストール(.unitypackage と UPM マニフェスト)、CLI の認証情報、ライフサイクルが正しいことを検証済みの最小限のクライアント配線です。 |
ui.md | 自分で UI を構築する方法です。コンポーネントはありません。UGUI でのチャット一覧と入力欄、参加者ビュー、トラックのバインド仕様、セルフプレビュー、サブスクリプション管理を扱います。 |
platforms.md | ターゲットごとのプレイヤー設定、IL2CPP とマネージドストリッピング、Newtonsoft の競合、WebGL、Android/iOS/デスクトップ、プッシュ通知でできることとできないことです。 |
docs-map.md | 両製品について、目的から該当する正確なドキュメントページへの対応を、各ページに掲載されているコードの種類とともに示します。ソースコードを参照する場合の代替手段も記載されています。 |
サポート
ユーザーがサポートや問い合わせ先を尋ねた場合は、getstream.io/contact を案内してください。SDK の不足機能や機能リクエストは、リポジトリのイシューにお寄せください:Chat、Video。