Unity SDK
ElevenAgents SDK:カスタマイズ可能なインタラクティブ音声エージェントをUnityゲームに導入します。
ElevenAgentsの仕組みについては、ElevenAgentsの概要を参照してください。
ElevenAgents Unity SDKは、UnityシーンをElevenLabsエージェントに接続します。プレイヤーのマイクをキャプチャし、エージェントの音声をAudioSource経由でストリーミングし、Editor、デスクトップスタンドアロンプレイヤー、WebGLビルドで同じように動作する単一のConversation APIを通じてセッションを公開します。
要件
- Unity 6.3 LTS(
6000.3.0f1)以降。SDKはUnity 6.3で導入されたスクリプタブルオーディオAPIを使用します。 - Api Compatibility Levelを .NET Standard 2.1に設定。これはUnity 2023.1以降のデフォルトです。
- ElevenLabsアカウントとエージェント。ダッシュボードで作成するか、クイックスタートに従ってください。
プラットフォーム対応
SDKは、アクティブなビルドターゲットに応じてトランスポートを自動選択します。WebRTCはWebGLでのみ利用できます。その他すべてのターゲットでは、ConnectionType.WebRTCはNotSupportedExceptionをスローします。
SDKはマイク権限をリクエストしません。iOSおよびAndroidでは、セッションを開始する前に自分でリクエストしてください。
インストール
UnityでWindow > Package Managerを開き、+ > Install package from git URLを選択して、リポジトリURLを貼り付けます。
Package Managerは、依存関係のInput SystemおよびNewtonsoft Jsonとともに、パッケージをElevenAgents(io.elevenlabs.agents)としてインストールします。
パッケージには2つのサンプルが含まれています。Package Manager > ElevenAgents > Samplesからインポートしてください。QuickStartは、ライブ文字起こしを表示する単一のMonoBehaviourです。GettingStartedは、空間オーディオと動的変数を備えた、近づいて話しかけるためのシーンです。手順ごとのガイドは、Getting started walkthroughを参照してください。
クイックスタート
このセクションでは、空のシーンに音声エージェントを追加します。Play Modeに入るとエージェントが話し始め、Play Modeを終了するとセッションも終了します。
パブリックエージェントを作成する
ElevenLabsダッシュボードでエージェントを作成します。エージェントのSecurity設定でAuthenticationをオフにすると、ゲームはエージェントIDだけで接続できます。エージェントIDをコピーしてください。
認証が必要なエージェントについては、パブリックエージェントとプライベートエージェントを参照してください。
パブリックエージェントとプライベートエージェント
パブリックエージェント
プライベートエージェント
エージェントIDを直接渡します。IDを知っている人は誰でも、エージェントとの会話を開始できます。
AgentId、SignedUrl、ConversationTokenのいずれか1つだけを設定してください。独自システム内のプレイヤーと会話を関連付けるには、UserIdを設定します。
空間オーディオ
デフォルトでは、SDKが作成する非表示のAudioSourceを通じてエージェントの音声を再生します。シーン内に音声を配置するには、独自のAudioSourceをOutputAudioSourceとして渡します。
SDKは、ソースの空間ブレンド、ロールオフ、ミキサールーティング、位置を維持します。セッション終了時には、ソースのクリップ、ループ、音量設定を復元します。
口のアニメーションなど、エージェントの音声で視覚効果を動かすには、毎フレームconversation.GetOutputVolume()を読み取ります。すべてのプラットフォームで、0から1までの値を返します。
パーソナライズ
動的変数を使用すると、エージェントのプロンプトと最初のメッセージ内のプレースホルダーを入力できます。また、オーバーライドを使用すると、1つのセッションについてエージェント設定の一部を置き換えられます。
動的変数の値には、文字列、数値、またはブール値を使用する必要があります。サーバーが受け入れる前に、各オーバーライドをエージェントのSecurity設定で有効にする必要があります。
クライアントツール
クライアントツールを使うと、エージェントはゲーム内でアクションをトリガーできます。エージェント設定でツールを定義してから、同じ名前のハンドラーを登録します。
SDKはNewtonsoft Jsonを使用してツールパラメータをTParamsにデシリアライズするため、パラメータ名がプロパティ名と異なる場合は[JsonProperty]を使用してください。戻り値はツール結果としてシリアライズされます。非同期ハンドラーにはAwaitable<TResult>を返します。特定の失敗をエージェントに報告するには、errorTypeを指定してClientToolExceptionをスローします。その他の例外は一般的なエラーとして報告されます。
登録済みハンドラーのないツール呼び出しでは、ErrorOccurredが発生します。UnhandledClientToolCallを購読している場合は、代わりにそちらが発生します。
イベント
StartSessionAsyncが返すConversationのイベントを購読します。SDKはUnityのメインスレッドでこれらを発生させます。
ConnectedイベントはStartSessionAsyncが返る前に発生するため、呼び出しの完了後にConversationIdとStatusを直接読み取ってください。パッケージの変更履歴には、すべてのイベント一覧が記載されています。
メソッド
たとえば、プレイヤーが新しいエリアに入ったとき、現在地をエージェントに送信します。
WebGLビルド
WebGLビルドには、追加のPlayer Settingが1つ必要です。Player Settings > WebGL > Publishing Settingsで、Use WebAssembly.Tableをオンにします。この設定がオフの場合、SDKは手順を表示してビルドを失敗させます。
UnityにはWebGL用のスクリプタブルオーディオパイプラインがないため、SDKはブラウザのWeb Audio APIを通じてエージェントの音声を再生し、OutputAudioSourceの音量、位置、空間設定を反映します。そのため、WebGLではAudioSource.GetOutputDataとOnAudioFilterReadは無音を返します。代わりにGetOutputVolume()とGetOutputByteFrequencyData()を使用してください。
アクティブなビルドターゲットがWebGLの場合、EditorのPlay Modeはまだサポートされていません。Editorでテストするには、デスクトップビルドターゲットに切り替えてください。
WebGLの完全な互換性マトリクスについては、COMPATIBILITY.mdを参照してください。
トラブルシューティング
StartSessionAsyncがArgumentExceptionをスローする。AgentId、SignedUrl、ConversationTokenのいずれか1つだけを設定してください。- 有効なエージェントIDでセッション接続に失敗する。 エージェントに認証が必要です。認証をオフにするか、署名付きURLで接続してください。
- オーバーライドが反映されない。 エージェントのSecurity設定で対応するオーバーライドを有効にしてください。
- WebGLでプレイヤーに音が聞こえない。 ブラウザは、プレイヤーがページを操作するまでオーディオを停止したままにします。クリックまたはキー操作の後にセッションを開始してください。
- WebGLでマイクを利用できない。 ブラウザは、HTTPSまたは
localhostから配信されるページにのみマイクアクセスを許可します。
バグの報告や機能リクエストは、GitHubで受け付けています。