EOS Voice Chat プラグイン

Epic Online Services をボイス チャット プロバイダーとして使用する

Windows
MacOS
Linux

ボイス コミュニケーションを使用すると、プレイヤー同士がすばやく簡単にコミュニケーションを取ることができます。EOS Voice Chat プラグインにより、デベロッパーは Epic Online Services (EOS) の Voice インターフェースを活用して、ボイス コミュニケーション機能 (エンジンの Online Subsystem (OSS) で使い慣れている IVoiceChat インターフェースおよび IVoiceChatUser インターフェースを使用できることを含む) を自分の製品に追加できます。さらに、これまで VivoxVoiceChat を使用してきたデベロッパーも、EOS バックエンドに容易に移行できます。

設定

EOS Voice Chat プラグインでは、IVoiceChat インターフェースおよび IVoiceChatUser インターフェースを実装します。まず、エディタの [Edit (編集)] メニューで [Plugin (プラグイン)] ブラウザを開き、該当するプラグインを見つけて有効化します。

EnableEOSVoiceChat.png

プロジェクトでこのプラグインを有効にすると、 Lobbies 方式または 信頼済みサーバー 方式を使用して Voice インターフェースを統合できます。これらの方式は相互に排他的でないため、組み合わせることで双方のメリットと機能を活用することができます。

どちらも EOS の仕組みに基づいていますが、EOS SDK を使用して直接プログラミングする必要はありません。ただし、この仕組みの詳細を確認するには、「Voice インターフェース」を参照してください。なお、このドキュメントを参照する際は、IVoiceChat の Channels が EOS の Rooms に相当し、これら 2 つの用語が同等の意味で使用されていることにご注意ください。

EOS Voice インターフェースを統合する

使用できる統合方式には Lobbies と信頼済みサーバーの 2 種類があり、それぞれが異なる機能を提供します。そのため、どちらの方式がプロジェクトに適しているか、または両方の方式を組み合わせて使用するアプローチが適切であるかを、検討することをお勧めします。Lobbies 方式を利用すると、 IVoiceChatUser::JoinChannel 関数を使用することなく、EOS 経由で自動的にボイス チャットに参加し、EOS から IVoiceChatUser インスタンスを受信します。信頼済みサーバー方式を利用すると、信頼済みサーバーの資格情報を使用して IVoiceChatUser::JoinChannel 関数を呼び出す必要がありますが、この要件を満たせば参加/退出を行うチャンネルを選択できます。さらに、この方式では EOS が提供するインスタンスを使用する必要なく、IVoiceChat インスタンスおよび IVoiceChatUser インスタンスを制御できます。OnlineSubsystemEOS プラグインで Lobbies のボイス チャンネルを自動で管理し、信頼済みサーバーのチャンネルを IVoiceChat インターフェースと IVoiceChatUser インターフェースを使用して手動で管理する場合は、これら 2 つの統合方式を組み合わせて使用することができます。また、デベロッパーが 2 つの方式を組み合わせて使用すると、信頼済みサーバー方式を使用してユーザーが参加したチャンネルで Lobbies 方式の IVoiceChatUser インスタンスを再利用できます。

まず、「EOS Developer Portal」で独自のアプリケーションを構成する必要があります。さらに Lobbies 統合方式を使用する場合は、 OnlineSubsystemEOS プラグインをプロジェクトで有効化する必要があります。

Lobbies 方式を使用する

Lobbies 方式は、チャンネルへの参加に関連するほとんどの作業を、EOS を利用して処理します。そのため、この統合方式を使用する場合は、チャンネルの初期化、接続、ログイン、参加を EOS が行うため、通常のように IVoiceChat フローを実装する必要がありません。

プロジェクトで OnlineSubsystemEOS を設定すると、EOS ロビー セッションへの参加やホストができるようになります。対応するボイス チャンネルへの自動参加を有効化するには、次の手順を実行してください。

  1. EOS Developer Portal に移動し、アプリケーションの構成でボイス サポートを有効化します。

  2. ロビー セッションの作成時に FOnlineSessionSettings::bUseLobbiesVoiceChatIfAvailabletrue に設定します。

  3. FOnlineSubsystemEOS::GetVoiceChatUserInterface を呼び出して、特定のローカル ユーザーに関連付けられた IVoiceChatUser インターフェースのインスタンスを取得します。

これで EOS へのユーザーのログイン時に GetVoiceChatUserInterface 関数を使用して、IVoiceChatUser インターフェース インスタンスを取得できます。チャンネルを管理する必要はないものの、このインスタンスを使用すると、ユーザーが選択した入出力デバイスやブロックされたプレイヤーのリストなど、システムが備える他の機能を操作できます。また、イベント通知のコールバックを登録する際は、このインターフェース インスタンスを使用します。ユーザーがログインしている限り、OnlineSubsystemEOS プラグインは、ユーザーが参加/退出を行うロビーに関連付けられたボイス チャンネルに対して、自動的に参加/退出を行います。参加/退出が行われると、EOSVoiceChat は OnVoiceChatChannelJoined デリゲートと OnVoiceChatChannelExited デリゲートをブロードキャストします。

また OnlineSubsystemEOS プラグインは、ロビー セッションの作成、破棄、参加、退出に関する通知などのロビー セッションに関する情報で、EOS Voice Chat プラグインを自動的に更新します。EOS Voice Chat プラグインは、これらのイベントに応じて OnVoiceChatChannelJoined デリゲートと OnVoiceChatChannelExited デリゲートをブロードキャストします。

信頼済みサーバー方式を使用する

チャンネルを手動で管理する必要がある場合は、信頼済みサーバー統合方式を使用する必要があります。たとえば、EOS Lobbies に基づいていないパーティ システムを使用する場合、自分のパーティー用のチャンネルを作成するために、この方式を使用する必要があります。信頼済みサーバー方式ではユーザーのチャンネル接続をより詳細に制御できますが、ユーザーがチャンネルに参加する際は、信頼済みサーバーからログイン資格情報を取得する必要があります。

信頼済みサーバー エンジンを構成する

Lobbies 統合の IVoiceChatUser インターフェース インスタンスを再利用する場合は、このセクションを省略できます。

Lobbies 統合を使用しない場合、または異なる IVoiceChatUser インターフェース インスタンスを使用する場合は、「Engine.ini」ファイルに次のセクションを追加して製品に関する情報を入力する必要があります。

[EOSVoiceChat]
ProductId=
SandboxId=
DeploymentId=
ClientId=
ClientSecret=

各行に製品に関する適切な値を入力します。これらの値は EOS Developer Portal で製品を開くと表示されます。EOSVoiceChat ではこれらの値を使用して、EOS プラットフォーム インターフェース のインスタンスを作成します。

コードのフロー

IVoiceChat インスタンスと IVoiceChatUser インスタンスを独自に作成する場合は、IVoiceChat のライフサイクルに従う必要があります。このサイクルの基本フローでは、まず IVoiceChat インスタンスの取得と初期化を行い、このインスタンスを使用してローカル プレイヤーごとに IVoiceChatUser インスタンスを作成します。IVoiceChatUser インスタンスを使用すると、信頼済みサーバーのチャンネルに対して参加/退出を手動で自由に行うことができ、さらにユーザーは EOS で他のユーザーとコミュニケーションを取ることができます。ボイス コミュニケーションがすべて終了したら、通常はアプリケーションをシャットダウンする際に、作成したインスタンスの初期化を解除する必要があります。このフローは次の複数の関数を含みます。これらの関数は順に呼び出す必要があります。

信頼済みサーバー統合方式の一部として作成したインスタンスには、このフローが必要です。プロジェクトで両方の統合方式を使用し、さらに信頼済みサーバー チャンネルで OSS EOS の 1 つ以上の IVoiceChatUser インスタンスを再利用する場合は、これらの要件は適用されません。この場合は、Lobbies 統合方式で、インスタンスの存続期間の管理など、ほとんどの IVoiceChat フローを自動的に処理し、ログイン済みの IVoiceChatUser インスタンスを提供します。

関数

使用方法

IVoiceChat::Initialize

IVoiceChat インスタンスを初期化します。作成したすべてのインスタンスを使用する前に、これを呼び出す必要があります。

IVoiceChat::Connect

構成済みのボイス サーバーに接続します。

IVoiceChat::CreateUser

IVoiceChatUser インターフェース インスタンスを作成します。チャンネルに参加しようとしている各ローカル ユーザーがログインするためには、独自のインスタンスが必要です。CreateUser は、このフローで使用する他の関数とは異なり、いつでも呼び出すことができます。

IVoiceChatUser::Login

ボイス チャット サーバーにローカル ユーザーをログインさせます。PlayerName パラメータはユーザーに対する EOS 製品 ID であり、これは EOS_ProductUserId_ToString API で文字列化してから、UTF8_TO_TCHAR などで FString に変換します。

IVoiceChatUser::JoinChannel

サーバーにログインしてからチャンネルに参加します。ユーザーは同時に複数のチャンネルに参加でき、チャンネルからの退出や再参加も可能です。各チャネルは、それ以降、継続的に個別のフローに従います。このプロセスには資格情報が必要です。資格情報を取得する方法については、以下の「チャンネルに参加する」セクションを参照してください。

IVoiceChatUser::LeaveChannel

(任意) 以前に JoinChannel を使用して参加したチャンネルから、ローカル ユーザーを退出させます。

IVoiceChatUser::Logout

(任意) ボイス チャット サーバーからローカル ユーザーをログアウトさせます。これを実行すると、結果的にユーザーはすべてのチャンネルから退出します。ログアウトしても Login を呼び出すことで、新しいインターフェース インスタンスを作成する必要なく、再ログインできます。

IVoiceChat::Disconnect

(任意) ボイス サーバーとの接続を解除します。この方法でも効率的にログアウトし、参加していたすべてのチャンネルからユーザーを退出させることができます。

IVoiceChat::Uninitialize

IVoiceChat インターフェース インスタンスをシャットダウンします。また、この関数を呼び出すと、ユーザーが参加、ログアウト、接続解除したボイス チャット サーバーのすべてのチャンネルから退出します。通常、これはアプリケーションのシャットダウン時に呼び出されます。

チャンネルに参加する

コードに EOS SDK とのインターフェースを備える必要ありませんが、チャンネルに参加するプロセスでは最終的に EOS Voice インターフェースを利用します。このシステムの詳細を確認するには、EOS のドキュメント サイトの「Voice インターフェース」を参照してください。

チャンネルに参加する際は、信頼済みサーバーのクライアント ベースの URL と参加者トークンが必要です。この情報を EOS Voice Chat に提供するためには、 FEOSVoiceChatChannelCredentials 構造体に入力してから JSON にシリアル化します。このサンプルを以下に示します。

// Create an FEOSVoiceChatChannelCredentials data structure.
FEOSVoiceChatChannelCredentials ChannelCredentials;
// Set the client base URL from the trusted server; this will vary from session to session.
// The URL should look like "wss://example-of-url-us-east-1.rtcp.on.epicgames.com".
ChannelCredentials.ClientBaseUrl = ClientBaseUrlFromTrustedServer
// Set the participant token from the trusted server.
ChannelCredentials.ParticipantToken = ParticipantTokenFromTrustedServer;

// Call JoinChannel with the FEOSVoiceChatChannelCredentials data structure.
VoiceChatUser->JoinChannel(ChannelName, ChannelCredentials.ToJson(), ...);

Lobbies 方式と信頼済みサーバー方式を組み合わせて使用する

Lobbies 統合方式と信頼済みサーバー統合方式は、相互に完全に互換性があります。両方の方式が備えるメリットを活用すると、Lobbies 方式の IVoiceChatUser インターフェースを再利用して信頼済みサーバー チャンネルの参加、退出、操作したり、またはインターフェース インスタンスを個別に作成することができます。

テストとデバッグ

コンソール コマンド

コマンド

説明

eosvoicechat list

すべての EOSVoiceChat インスタンスを、そのインスタンス ID、デバッグ名 (区別するうえで役立つ)、作成したユーザー インターフェース数とともに一覧表示します。

eosvoicechat info instanceid=<instanceid>

インスタンスの現在の状態と、関連付けられているすべてのユーザー インターフェースをログにダンプします。

eosvoicechat initialize instanceid=<instanceid>

該当するインスタンスを初期化します。

eosvoicechat uninitialize instanceid=<instanceid>

該当するインスタンスの初期化を解除します。

eosvoicechat connect instanceid=<instanceid>

該当するインスタンスを「接続します」。これは EOS Voice Chat で常に正常に処理されます。EOS Voice はチャンネルごとに接続を処理するためです。

eosvoicechat disconnect instanceid=<instanceid>

該当するインスタンスの接続を解除します。

eosvoicechat createuser instanceid=<instanceid>

新しい IVoiceChatUser インターフェースを作成します。

eosvoicechat releaseuser instanceid=<instanceid>

createuser で作成した IVoiceChatUser インターフェースを解放します。

eosvoicechat createsingleuser instanceid=<instanceid>

この方法は画面を分割しないゲームで便利です。単一のユーザー インターフェースを作成できます。その際、そのインターフェースを必要とするコマンドで UserIndex=<UserIndex> を渡す必要がありません。

eosvoicechat input setvolume instanceid=<instanceid> userindex=<userindex> volume=<volume>

力デバイスのボリュームを設定します。「0.0」から「1.0」までの float 値を指定できます。

eosvoicechat input mute instanceid=<instanceid> userindex=<userindex>

入力デバイスをミュートします。

eosvoicechat input unmute instanceid=<instanceid> userindex=<userindex>

入力デバイスのミュートを解除します。

eosvoicechat input listdevices instanceid=<instanceid> userindex=<userindex>

使用できる入力デバイスを一覧表示します。

eosvoicechat input setdevice instanceid=<instanceid> userindex=<userindex> deviceid=<deviceid>

特定の入力デバイスを選択します。listdevices コマンドから有効な deviceid 値のリストを取得できます。

eosvoicechat input setdefaultdevice instanceid=<instanceid> userindex=<userindex>

使用する入力デバイスをデフォルトに戻します。

eosvoicechat output setvolume instanceid=<instanceid> userindex=<userindex> volume=<volume>

出力デバイスのボリュームを設定します。「0.0」から「1.0」までの float 値を指定できます。

eosvoicechat output mute instanceid=<instanceid> userindex=<userindex>

出力デバイスをミュートします。

eosvoicechat output unmute instanceid=<instanceid> userindex=<userindex>

出力デバイスのミュートを解除します。

eosvoicechat output listdevices instanceid=<instanceid> userindex=<userindex>

使用できる出力デバイスを一覧表示します。

eosvoicechat output setdevice instanceid=<instanceid> userindex=<userindex> deviceid=<deviceid>

特定の出力デバイスを選択します。listdevices コマンドから有効な deviceid 値のリストを取得できます。

eosvoicechat output setdefaultdevice instanceid=<instanceid> userindex=<userindex>

使用する出力デバイスをデフォルトに戻します。

eosvoicechat login instanceid=<instanceid> userindex=<userindex> playername=<playername>

このインターフェースにユーザーをログインさせます。playername パラメータは、ユーザーの EOS 製品 ID を文字列化したものです。

eosvoicechat logout instanceid=<instanceid> userindex=<userindex>

このユーザー インターフェースからユーザーをログアウトさせます。

eosvoicechat channel join instanceid=<instanceid> userindex=<userindex> channelname=<channelname> channeltype=<channeltype>

指定したチャンネルに参加します。このコマンドでは、クライアント ベースの URL や参加者トークンを信頼済みサーバーにクエリすることなく、コンフィギュレーション ファイルの InsecureClientBaseUrl と生成した参加者トークンを使用します。FEOSVoiceChatUser::InsecureGetJoinToken を参照してください。channeltype パラメータはオプションです。「echo」という名前のフィードバック チャンネルがあり、これはシングル ユーザー テストで役立ちます。

eosvoicechat channel leave instanceid=<instanceid> userindex=<userindex> channelname=<channelname>

指定したチャンネルから退出します。

eosvoicechat channel transmit instanceid=<instanceid> userindex=<userindex> channelname=<channelname>

指定した特定のチャンネルに対してのみ送信します。

eosvoicechat channel transmitall instanceid=<instanceid> userindex=<userindex>

すべてのチャンネルに対して送信します。

eosvoicechat channel transmitnone instanceid=<instanceid> userindex=<userindex>

どのチャンネルに対しても送信しません。

eosvoicechat player mute instanceid=<instanceid> userindex=<userindex> playername=<playername>

指定したリモート プレイヤーをミュートします。相手の声は自分に伝わりませんが、自分の声は相手に伝わります。相手に対しても入力の送信を停止するには、block コマンドを参照してください。

eosvoicechat player unmute instanceid=<instanceid> userindex=<userindex> playername=<playername>

指定したリモート プレイヤーに対するミュートを解除します。

eosvoicechat player block instanceid=<instanceid> userindex=<userindex> playername=<playername>

指定したリモート プレイヤーをブロックして、互いに音声が聞こえないようにします。

eosvoicechat player unblock instanceid=<instanceid> userindex=<userindex> playername=<playername>

指定したリモート プレイヤーのブロックを解除します。

ログ出力

LogEOSVoiceChat ログ カテゴリは、上記のコンソール コマンドをはじめとする、EOSVoiceChat プラグイン自体が出力するログをすべて含みます。また、 LogEOSSDK ログ カテゴリはベースの EOS SDK が出力するログを含みます。LogEOSSDK ログ カテゴリの冗長レベルを変更すると、EOS SDK Logging インターフェース のログ冗長設定も更新されるため、この 2 つは常に同期されています。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる