今の原稿の数値
Unityでゲームを作る開発者は、ElevenLabsの音声エージェントを使い、キャラクターとプレイヤーが声で会話する場面を作れるようになりました。
Unityを使わない人や、ゲームを作らない人の環境は変わりません。
「ElevenAgents Unity SDK」は開発用キットです。Unityのゲームの場面と、ElevenLabsの音声エージェント(自分で受け答えを進めるAI)をつなぎます。SDKは、プレイヤーのマイクの音を拾い、エージェントの声をゲーム内の音源から流します。
ElevenLabsの公式ブログによると、通信は「Conversation API」(会話を扱う窓口)で動かします。同じコードがEditor、デスクトップ版、WebGLで動きます。iOS、Android、XRはベータ版です。
近づくと会話が始まる、基本の使い方
会話を始めるには、ElevenLabsの管理画面で作ったエージェントのIDが必要です。エージェントには、キャラの性格を決める指示文と声が入っています。
付属のGettingStartedサンプルでは、キャラの周りにトリガー用の判定領域を置きます。プレイヤーが入ると会話が始まり、出ると終わります。
コードでは、Conversation.StartSessionAsync で会話を開始し、EndSession で終了します。StartSessionAsync は、接続が開き、音声機器の準備ができた時点で結果を返します。ビルド先に合った通信方式も、SDKが自動で選びます。
声の出どころ、複数キャラ、ゲームとの連携
標準では、エージェントの声は位置の無い2D音声として流れます。自分の AudioSource(Unityの音を出す部品)を OutputAudioSource に渡すと、声がキャラの位置から聞こえます。
GetOutputVolume() は、エージェントの現在の音量を0から1で返します。サンプルはこの値で立方体を上下に揺らしており、口の動きの表現にも使えます。
1つのエージェントを複数のキャラで共有する機能もあります。動的変数(指示文の {{mood}} のような穴埋め)に、キャラごとの値を会話開始時に送ります。
値は文字列、数値、真偽値が使えます。サンプルでは、黄色い楽しげなキューブと赤い怒ったキューブが1つのエージェントを共有します。
もっと大きな変更には、オーバーライド(1回の会話だけ設定の一部を差し替える仕組み)を使います。最初の発言や声を変えられます。ただし、エージェントのセキュリティ設定で、項目ごとに先に許可しておく必要があります。
SendContextualUpdate は、「プレイヤーが地下室の鍵を拾った」のようなゲーム内の出来事をエージェントに伝えます。会話を止めず、プレイヤーが言っていない発言も作りません。
クライアントツールを使うと、エージェントの判断でゲームのコードを動かせます。ツールをエージェントの設定で定義し、同じ名前でハンドラー(処理の受け皿)を登録します。たとえば、公式の例は open_door でドアを開く処理です。
SDKはツールの引数をNewtonsoft Jsonで読み取り、ハンドラーの戻り値をエージェントに返します。時間のかかる処理は Awaitable で返せます。失敗の理由は ClientToolException で伝えます。
UserTranscriptReceived、AgentResponded、ModeChanged、Interrupted などのイベントは、Unityのメインスレッドで発生します。そのため、画面の更新に直接使えます。
テキスト入力、マイクのミュート、音量調整、入出力機器の切り替えにも対応します。
日本の開発者が確認する対応環境と始め方
ElevenLabsの公式ドキュメントによると、必要な環境はUnity 6.3 LTS(6000.3.0f1)以降です。
SDKはUnity 6.3で導入されたスクリプタブルオーディオAPIを使います。ApiCompatibilityLevelは既定で .NET Standard 2.1です(ElevenLabs公式ドキュメント、11/7確認)。
対応状況は次のとおりです。
- Editorとデスクトップ(macOS、Windows、Linux): 対応、WebSocket
- WebGL: 対応、WebSocketまたはWebRTC
- iOS、Android、XR: ベータ版、WebSocket
ベータ版の対象は、デスクトップと同じネイティブの通信方式です。ただし、SDKのテストの対象にはまだ入っていません(ElevenLabs公式ドキュメント、11/7確認)。
導入の流れは3段階です。まず、管理画面でエージェントを作ります。最初の動作確認では、セキュリティ設定の認証を切ると、エージェントIDだけで接続できます。
次に、UnityのPackage ManagerでGit URLからSDKを入れます。バージョンは https://github.com/elevenlabs/unity.git#v0.1.0 と固定します。
最後に、GettingStartedサンプルを取り込み、IDを貼り付けて再生します。入門の手順は約10分で、近づくと挨拶するキューブが完成します。
環境ごとの注意点と、公開前に必ずすること
iOSとAndroidでは、SDKがマイクの許可を求めません。会話を始める前に、開発者が許可を取得する必要があります。
WebGLでは、Publishing Settingsで「Use WebAssembly.Table」をオンにします。オフだと、SDKが手順つきでビルドを失敗させます。
WebGLをビルド先にしている間は、Play Modeが動きません。デスクトップ向けの設定で試してください。
WebGLでは、声をブラウザーのWeb Audio API経由で流します。そのため、ミキサーの経路やドップラー効果など、一部の AudioSource 設定は反映されません。
AudioSource.GetOutputData と OnAudioFilterRead は無音を返します。代わりに GetOutputVolume() と GetOutputByteFrequencyData() を使います。WebRTCの会話は OutputAudioSource を無視します。
公開前には、認証を必ず元に戻します。自分のサーバーが短時間だけ有効な署名つきURLを取得し、ゲームは AgentId の代わりに SignedUrl として渡します。ElevenLabsのAPIキーは、ゲームのビルドに入れてはいけません。
ElevenLabsは、声の作り方についても解説を公開しています(ElevenLabs、AI音声合成と音声クローンの作成方法を公開)。