EOS ボイスチャット
注釈:本資料はAI技術を用いて翻訳されています。
ボイスチャットを使用すると、プレイヤーはゲームプレイ中にリアルタイムでコミュニケーションを取ることができます。このガイドでは、Epic Online Services (EOS) Voice と AccelByte Gaming Services (AGS) を統合して、パーティー、チーム、ゲームセッションでボイスチャットを有効にする方法を説明します。
- AGS で EOS Voice Chat をセットアップする方法
- パーティー、チーム、ゲームセッションにボイスチャットを追加する方法
- ゲーム内でボイス機能を制御する方法
仕組み
この統合では、連携して動作する2つのコンポーネントを使用します。
- バックエンドサービス - EOS ボイストークンを生成する Extend Service Extension アプリ
- Unreal プラグイン - そのトークンを使用してプレイヤーをボイスチャンネルに接続するプラグイン
プレイヤーがパーティーまたはゲームセッションに参加すると、ゲームクライアントはバックエンドサービスにボイストークンをリクエストします。バックエンドは、そのプレイヤーが実際にそのパーティーまたはセッションに参加していることを検証し、その後 Epic にトークンをリクエストします。プレイヤーはそのトークンを使用してボイスチャンネルに参加します。
ボイスチャンネルの種類
この統合は、3種類のボイスチャンネルをサポートしています。
| チャンネル | 説明 | 使用例 |
|---|---|---|
| パーティー | パーティーメンバーと会話 | マッチの前後に友達とチャット |
| チーム | セッション内のチームメイトと会話 | 戦術的なチームコミュニケーション |
| セッション | マッチ内の全員と会話 | ロビーチャット、カジュアルゲーム |
すべてのチャンネルは非位置情報型 (2D) オーディオを使用します。つまり、ゲーム内の位置に関わらず、プレイヤーは同じ音量で互いの声を聞くことができます。
前提条件
始める前に、以下を用意してください。
- ゲームネームスペースを持つ AccelByte Gaming Services アカウント
- プロダクトが設定された Epic Games Developer Portal アカウント
- AGS SDK がインストールされた Unreal Engine プロジェクト
- バックエンドサービスのビルドとデプロイ用に Docker がインストールされていること
開始方法
ステップ1: Epic Developer Portal のセットアップ
まず、Epic Online Services を AccelByte 認証と連携するように設定します。
-
Epic Developer Portal でプロダクトを開きます。
-
Product Settings > Clients に移動し、以下の設定で OAuth クライアントを作成します。
- Policy Type:
TrustedServer - Permissions: Voice と Connect を有効化
Client ID と Client Secret を保管しておきます。
- Policy Type:
-
プロダクト設定から Deployment ID を確認します。
-
Product Settings > Identity Providers に移動し、OpenID プロバイダーを追加します。
フィールド 値 Identity Provider OpenID Description AccelByte Type UserInfo Endpoint UserInfo API Endpoint https://{your-ags-domain}/iam/v3/public/users/meHTTP Method GET AccountId userIdDisplayName displayName
この設定により、AccelByte アカウントが Epic にリンクされ、バックエンドサービスがプレイヤー用のボイストークンを生成できるようになります。
ステップ2: バックエンドサービスのデプロイ
バックエンドサービスは、ボイストークンの生成を処理し、パーティーおよびセッションにおけるプレイヤーのメンバーシップを検証します。
-
リポジトリをクローンします。
git clone https://github.com/AccelByte/extend-eos-voice-rtc.git -
AGS Admin Portal で、対象のネームスペースに移動し、Extend > Service Extension に進みます。
-
Create New をクリックし、アプリの名前 (例:
eos-voice) を入力します。 -
アプリの詳細ページで、以下の環境シークレットを設定します。
シークレット 説明 AB_CLIENT_IDこのサービス用の AccelByte OAuth クライアント ID AB_CLIENT_SECRETAccelByte OAuth クライアントシークレット EPIC_CLIENT_IDEpic Games OAuth クライアント ID EPIC_CLIENT_SECRETEpic Games OAuth クライアントシークレット EPIC_DEPLOYMENT_IDEpic RTC デプロイメント ID -
以下の環境変数を設定します。
変数 値 BASE_PATH/eos-voiceEPIC_BASE_URLhttps://api.epicgames.devPLUGIN_GRPC_SERVER_AUTH_ENABLEDtrue -
extend-helper-cli を使用してコンテナイメージをビルドし、アップロードします。
export AB_BASE_URL='https://your-ags-domain'
export AB_CLIENT_ID='your-client-id'
export AB_CLIENT_SECRET='your-client-secret'
extend-helper-cli image-upload --login --namespace <namespace> --app <app-name> --image-tag v0.0.1 -
アプリの詳細ページで、Deploy Latest Image をクリックし、ステータスが RUNNING になるまで待ちます。
AGS Private Cloud の場合:
ADMIN:ROLE [READ]ADMIN:NAMESPACE:{namespace}:NAMESPACE [READ]ADMIN:NAMESPACE:{namespace}:SESSION [READ]ADMIN:NAMESPACE:{namespace}:SESSION:PARTY [READ]ADMIN:NAMESPACE:{namespace}:NOTIFICATION [CREATE]
AGS Public Cloud の場合:
- IAM > Roles (Read)
- Basic > Namespace (Read)
- Session > Game Session (Read)
- Session > Admin Party (Read)
- Lobby > Notification (Create)
ステップ3: Unreal プラグインのインストール
Unreal プラグインは、ボイスチャンネルの接続を管理し、ボイス機能を制御するためのシンプルな API を提供します。
-
GitHub リリースページから AccelByteEOSVoice プラグインをダウンロードします。
-
プラグインをプロジェクトの
Plugins/ディレクトリにコピーします。 -
Extend Codegen CLI を使用して、バックエンドサービス用の SDK を生成します。これにより、ボイスプラグインが依存する
AccelByteUe4SdkCustomizationプラグインが作成されます。 -
.uprojectファイルで必要なプラグインを有効化します。{
"Plugins": [
{ "Name": "AccelByteUe4Sdk", "Enabled": true },
{ "Name": "OnlineSubsystemAccelByte", "Enabled": true },
{ "Name": "OnlineSubsystemEOS", "Enabled": true },
{ "Name": "EOSVoiceChat", "Enabled": true },
{ "Name": "AccelByteEOSVoice", "Enabled": true },
{ "Name": "AccelByteUe4SdkCustomization", "Enabled": true }
]
}
ステップ4: プロジェクトの設定
プロジェクトの DefaultEngine.ini に以下の設定を追加します。
[/Script/AccelByteEOSVoice.AccelByteEOSVoiceConfig]
; パーティーの作成/参加時にパーティーボイスに自動参加する
bAutoJoinPartyVoice=true
; ゲームセッション参加時にチームボイスに自動参加する
bAutoJoinTeamVoice=false
; ゲームセッション参加時にセッション全体のボイスに自動参加する
bAutoJoinSessionVoice=false
; 表示名を持たないユーザーの表示名を自動生成する (形式: Player-XXXX)
bAutoGenerateDisplayNameIfEmpty=true
EOS が OpenID 認証を使用するように設定します。
[/Script/OnlineSubsystemEOS.EOSSettings]
bUseEAS=false
bUseEOSConnect=true
bUseNewLoginFlow=true
ステップ5: ボイスチャットのテスト
-
2人のプレイヤーでゲームを起動します。
-
両方のプレイヤーにログインし、同じパーティーに参加してもらいます。
-
プレイヤー間でボイス通信が機能することを確認します。
ボイスチャットが接続しない場合は、トラブルシューティング セクションを確認してください。
ボイス機能の制御
このプラグインは、実行時にボイス機能を制御するためのシンプルな C++ API を提供します。
ボイスサブシステムの取得
// ゲームインスタンスからボイスサブシステムを取得
UGameInstance* GameInstance = GetWorld()->GetGameInstance();
UAccelByteEOSVoiceSubsystem* VoiceSubsystem =
GameInstance->GetSubsystem<UAccelByteEOSVoiceSubsystem>();
マイクをミュートする
// マイクをミュート
VoiceSubsystem->SetAudioInputDeviceMuted(true);
// マイクのミュートを解除
VoiceSubsystem->SetAudioInputDeviceMuted(false);
スピーカーをミュートする
// 受信するボイスをすべてミュート (全消音)
VoiceSubsystem->SetAudioOutputDeviceMuted(true);
// スピーカーのミュートを解除
VoiceSubsystem->SetAudioOutputDeviceMuted(false);
特定のプレイヤーをミュートする
// 表示名で特定のプレイヤーをミュート
VoiceSubsystem->SetPlayerMuted(TEXT("PlayerName"), true);
// そのプレイヤーのミュートを解除
VoiceSubsystem->SetPlayerMuted(TEXT("PlayerName"), false);
送信先チャンネルの切り替え
プレイヤーが複数のボイスチャンネル (例: パーティーとチーム) に参加している場合、どのチャンネルに送信するかを制御できます。
// パーティーチャンネルのみに送信
VoiceSubsystem->TransmitToSpecificChannel(
EAccelByteEOSVoiceVoiceChannelType::PARTY);
// チームチャンネルのみに送信
VoiceSubsystem->TransmitToSpecificChannel(
EAccelByteEOSVoiceVoiceChannelType::TEAM);
// セッションチャンネル (全プレイヤー) に送信
VoiceSubsystem->TransmitToSpecificChannel(
EAccelByteEOSVoiceVoiceChannelType::SESSION);
EOS ボイスの高度な機能にアクセスする
高度な機能を利用するには、基盤となる EOS ボイスインターフェースにアクセスできます。
IVoiceChatUser* VoiceChatUser = VoiceSubsystem->GetVoiceChatUser();
if (VoiceChatUser)
{
// チャンネル内のプレイヤーのリストを取得
TArray<FString> Players = VoiceChatUser->GetPlayersInChannel(TEXT("PARTY"));
// 参加しているすべてのチャンネルを取得
TArray<FString> Channels = VoiceChatUser->GetChannels();
// 現在送信中かどうかを確認
bool bIsTransmitting = VoiceChatUser->IsTransmitting();
}
トラブルシューティング
ボイスチャットが接続しない
- バックエンドサービスがデプロイされ、RUNNING ステータスになっていることを確認する
- Epic Developer Portal で EOS Connect が設定されていることを確認する
- ボイスをリクエストする前に、プレイヤーがパーティーまたはセッションに参加していることを確認する
- 設定内で
bAutoJoinPartyVoiceが有効になっていることを確認する
他のプレイヤーの声が聞こえない
- ゲーム内でスピーカーがミュートになっていないか確認する
- 相手のプレイヤーが同じボイスチャンネルにいることを確認する
- 両方のプレイヤーがチャンネルに正常に参加していることを確認する (ログにエラーがないか)
bAutoJoinPartyVoiceまたはbAutoJoinSessionVoiceが有効になっていることを確認する
EOS ログインが失敗する
症状: Failed to login to EOS voice for LocalUserNum X
解決策:
- Epic Developer Portal で EOS Connect OpenID プロバイダーが設定されていることを確認する
- ユーザーが表示名を持っていることを確認する (
bAutoGenerateDisplayNameIfEmpty=trueを有効化する) DefaultEngine.ini内の EOS 認証情報を確認するbUseEOSConnect=trueとbUseNewLoginFlow=trueが設定されていることを確認する
Epic アカウントがリンクされていない (エラー 40303)
症状: バックエンドがエラーコード 40303 を返す
解決策:
- Epic Developer Portal で EOS Connect OpenID プロバイダーを設定する (ステップ1 を参照)
- EOS Connect SDK を使用して、ゲーム内でアカウントリンク機能を実装する
- 開発/ステージング環境の場合: OpenID アイデンティティプロバイダーを使用した Epic Player Group にテストアカウントを追加する
管理エンドポイントで権限が拒否される
管理エンドポイント (/admin/session/{session_id}/token および /admin/room/{room_id}/token/revoke) には追加の権限が必要です。
管理エンドポイントは AGS Private Cloud でのみ利用可能です。Public Cloud ではカスタム権限を作成できません。
Private Cloud の場合、OAuth クライアントに以下の権限を追加してください。
ADMIN:NAMESPACE:{namespace}:VOICE [CREATE]ADMIN:NAMESPACE:{namespace}:VOICE [DELETE]
次のステップ
- カスタムロジックを追加するためにバックエンドサービスをカスタマイズする
- Extend Service Extension のアーキテクチャについて学ぶ
- API ドキュメントについては、バックエンドサービスのリポジトリを表示する
- 詳細なプラグインドキュメントについては、Unreal プラグインのリポジトリを表示する