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

EOS ボイスチャット

Last updated on April 7, 2026

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

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

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

仕組み

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

  1. バックエンドサービス - EOS ボイストークンを生成する Extend Service Extension アプリ
  2. 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 を設定します。

  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 で namespace に移動し、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 Shared 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 ステータスが表示されていることを確認
  • 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=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 でのみ利用可能です。カスタムパーミッションは Shared Cloud では作成できません。

Private Cloud の場合、OAuth クライアントに以下のパーミッションを追加します。

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

次のステップ