EOS ボイスチャット
注釈:本資料はAI技術を用いて翻訳されています。
ボイスチャットにより、プレイヤーはゲームプレイ中にリアルタイムでコミュニケーションできます。このガイドでは、Epic Online Services (EOS) Voice と AccelByte Gaming Services (AGS) を統合して、パーティー、チーム、ゲームセッションでボイスチャットを有効にする方法を説明します。
- EOS Voice Chat と AGS のセットアップ方法
- パーティー、チーム、ゲームセッションへのボイスチャットの追加方法
- ゲーム内のボイス機能の制御方法
仕組み
この統合は、連携して機能する 2 つのコンポーネントを使用します。
- バックエンドサービス - EOS ボイストークンを生成する Extend Service Extension アプリ
- Unreal プラグイン - それらのトークンを使用してプレイヤーをボイスチャンネルに接続
プレイヤーがパーティーやゲームセッションに参加すると、ゲームクライアントはバックエンドサービスにボイストークンをリクエストします。バックエンドはプレイヤーが実際にそのパーティーまたはセッションに参加していることを検証し、Epic にトークンをリクエストします。プレイヤーはそのトークンを使用してボイスチャンネルに参加します。
ボイスチャンネルの種類
この統合は 3 種類のボイスチャンネルをサポートします。
| チャンネル | 説明 | ユースケース |
|---|---|---|
| パーティー | パーティーメンバーと会話 | マッチの前後に会話するフレンド |
| チーム | セッション内のチームメートと会話 | チームの戦術的なコミュニケーション |
| セッション | マッチ内の全員と会話 | ロビーチャット、カジュアルゲーム |
すべてのチャンネルは非位置音声(2D)を使用するため、プレイヤーはゲーム内の位置に関わらず同じ音量で互いの声を聞けます。
前提条件
開始する前に、以下を確認してください。
- ゲーム namespace を持つ AccelByte Gaming Services アカウント
- 設定済みのプロダクトを持つ Epic Games Developer Portal アカウント
- AGS SDK がインストールされた Unreal Engine プロジェクト
- バックエンドサービスのビルドとデプロイ用に Docker がインストールされていること
始め方
ステップ 1: Epic Developer Portal を設定する
まず、AccelByte 認証と連携するように Epic Online Services を設定します。
-
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 で namespace に移動し、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 Shared 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 ステータスが表示されていることを確認
- EOS Connect が Epic Developer Portal で設定されていることを確認
- ボイスをリクエストする前にプレイヤーがパーティーまたはセッションに参加していることを確認
- 設定で
bAutoJoinPartyVoiceが有効になっていることを確認
他のプレイヤーの声が聞こえない
- ゲーム内でスピーカーがミュートされていないことを確認
- 他のプレイヤーが同じボイスチャンネルにいることを確認
- 両プレイヤーがチャンネルへの参加に成功していることを確認(ログにエラーがないか確認)
bAutoJoinPartyVoiceまたはbAutoJoinSessionVoiceが有効になっていることを確認
EOS ログインが失敗する
症状: Failed to login to EOS voice for LocalUserNum X
解決策:
- EOS Connect OpenID プロバイダーが Epic Developer Portal で設定されていることを確認
- ユーザーが表示名を持っていることを確認(
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 でのみ利用可能です。カスタムパーミッションは Shared Cloud では作成できません。
Private Cloud の場合、OAuth クライアントに以下のパーミッションを追加します。
ADMIN:NAMESPACE:{namespace}:VOICE [CREATE]ADMIN:NAMESPACE:{namespace}:VOICE [DELETE]
次のステップ
- バックエンドサービスをカスタマイズする — カスタムロジックを追加
- Extend Service Extension について学ぶ — アーキテクチャの詳細
- バックエンドサービスリポジトリを確認する — API ドキュメント
- Unreal プラグインリポジトリを確認する — 詳細なプラグインドキュメント