メインコンテンツまでスキップ

EOS ボイスチャット

Last updated on July 14, 2026

注釈:本資料はAI技術を用いて翻訳されています。

ボイスチャットを使用すると、プレイヤーはゲームプレイ中にリアルタイムでコミュニケーションを取ることができます。このガイドでは、Epic Online Services (EOS) Voice と AccelByte Gaming Services (AGS) を統合して、パーティー、チーム、ゲームセッションでボイスチャットを有効にする方法を説明します。

このガイドで学べること
  • AGS で EOS Voice Chat をセットアップする方法
  • パーティー、チーム、ゲームセッションにボイスチャットを追加する方法
  • ゲーム内でボイス機能を制御する方法

仕組み

この統合では、連携して動作する2つのコンポーネントを使用します。

  1. バックエンドサービス - EOS ボイストークンを生成する Extend Service Extension アプリ
  2. Unreal プラグイン - そのトークンを使用してプレイヤーをボイスチャンネルに接続するプラグイン

プレイヤーがパーティーまたはゲームセッションに参加すると、ゲームクライアントはバックエンドサービスにボイストークンをリクエストします。バックエンドは、そのプレイヤーが実際にそのパーティーまたはセッションに参加していることを検証し、その後 Epic にトークンをリクエストします。プレイヤーはそのトークンを使用してボイスチャンネルに参加します。

ボイスチャンネルの種類

この統合は、3種類のボイスチャンネルをサポートしています。

チャンネル説明使用例
パーティーパーティーメンバーと会話マッチの前後に友達とチャット
チームセッション内のチームメイトと会話戦術的なチームコミュニケーション
セッションマッチ内の全員と会話ロビーチャット、カジュアルゲーム

すべてのチャンネルは非位置情報型 (2D) オーディオを使用します。つまり、ゲーム内の位置に関わらず、プレイヤーは同じ音量で互いの声を聞くことができます。

前提条件

始める前に、以下を用意してください。

  • ゲームネームスペースを持つ AccelByte Gaming Services アカウント
  • プロダクトが設定された Epic Games Developer Portal アカウント
  • AGS SDK がインストールされた Unreal Engine プロジェクト
  • バックエンドサービスのビルドとデプロイ用に Docker がインストールされていること

開始方法

ステップ1: Epic Developer Portal のセットアップ

まず、Epic Online Services を AccelByte 認証と連携するように設定します。

  1. Epic Developer Portal でプロダクトを開きます。

  2. Product Settings > Clients に移動し、以下の設定で OAuth クライアントを作成します。

    • Policy Type: TrustedServer
    • Permissions: Voice と Connect を有効化

    Client IDClient Secret を保管しておきます。

  3. プロダクト設定から Deployment ID を確認します。

  4. Product Settings > Identity Providers に移動し、OpenID プロバイダーを追加します。

    フィールド
    Identity ProviderOpenID
    DescriptionAccelByte
    TypeUserInfo Endpoint
    UserInfo API Endpointhttps://{your-ags-domain}/iam/v3/public/users/me
    HTTP MethodGET
    AccountIduserId
    DisplayNamedisplayName
注記

この設定により、AccelByte アカウントが Epic にリンクされ、バックエンドサービスがプレイヤー用のボイストークンを生成できるようになります。

ステップ2: バックエンドサービスのデプロイ

バックエンドサービスは、ボイストークンの生成を処理し、パーティーおよびセッションにおけるプレイヤーのメンバーシップを検証します。

  1. リポジトリをクローンします。

    git clone https://github.com/AccelByte/extend-eos-voice-rtc.git
  2. AGS Admin Portal で、対象のネームスペースに移動し、Extend > Service Extension に進みます。

  3. Create New をクリックし、アプリの名前 (例: eos-voice) を入力します。

  4. アプリの詳細ページで、以下の環境シークレットを設定します。

    シークレット説明
    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
  5. 以下の環境変数を設定します。

    変数
    BASE_PATH/eos-voice
    EPIC_BASE_URLhttps://api.epicgames.dev
    PLUGIN_GRPC_SERVER_AUTH_ENABLEDtrue
  6. 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
  7. アプリの詳細ページで、Deploy Latest Image をクリックし、ステータスが RUNNING になるまで待ちます。

バックエンドサービスの OAuth クライアントに必要な権限

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 を提供します。

  1. GitHub リリースページから AccelByteEOSVoice プラグインをダウンロードします。

  2. プラグインをプロジェクトの Plugins/ ディレクトリにコピーします。

  3. Extend Codegen CLI を使用して、バックエンドサービス用の SDK を生成します。これにより、ボイスプラグインが依存する AccelByteUe4SdkCustomization プラグインが作成されます。

  4. .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: ボイスチャットのテスト

  1. 2人のプレイヤーでゲームを起動します。

  2. 両方のプレイヤーにログインし、同じパーティーに参加してもらいます。

  3. プレイヤー間でボイス通信が機能することを確認します。

ボイスチャットが接続しない場合は、トラブルシューティング セクションを確認してください。

ボイス機能の制御

このプラグインは、実行時にボイス機能を制御するためのシンプルな 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=truebUseNewLoginFlow=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) には追加の権限が必要です。

important

管理エンドポイントは AGS Private Cloud でのみ利用可能です。Public Cloud ではカスタム権限を作成できません。

Private Cloud の場合、OAuth クライアントに以下の権限を追加してください。

  • ADMIN:NAMESPACE:{namespace}:VOICE [CREATE]
  • ADMIN:NAMESPACE:{namespace}:VOICE [DELETE]

次のステップ