Choose your operating system:
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 (プラグイン)] ブラウザを開き、該当するプラグインを見つけて有効化します。
プロジェクトでこのプラグインを有効にすると、 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 ロビー セッションへの参加やホストができるようになります。対応するボイス チャンネルへの自動参加を有効化するには、次の手順を実行してください。
EOS Developer Portal に移動し、アプリケーションの構成でボイス サポートを有効化します。
ロビー セッションの作成時に
FOnlineSessionSettings::bUseLobbiesVoiceChatIfAvailable
をtrue
に設定します。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 インスタンスを初期化します。作成したすべてのインスタンスを使用する前に、これを呼び出す必要があります。 |
|
構成済みのボイス サーバーに接続します。 |
|
IVoiceChatUser インターフェース インスタンスを作成します。チャンネルに参加しようとしている各ローカル ユーザーがログインするためには、独自のインスタンスが必要です。 |
|
ボイス チャット サーバーにローカル ユーザーをログインさせます。 |
|
サーバーにログインしてからチャンネルに参加します。ユーザーは同時に複数のチャンネルに参加でき、チャンネルからの退出や再参加も可能です。各チャネルは、それ以降、継続的に個別のフローに従います。このプロセスには資格情報が必要です。資格情報を取得する方法については、以下の「チャンネルに参加する」セクションを参照してください。 |
|
(任意) 以前に |
|
(任意) ボイス チャット サーバーからローカル ユーザーをログアウトさせます。これを実行すると、結果的にユーザーはすべてのチャンネルから退出します。ログアウトしても |
|
(任意) ボイス サーバーとの接続を解除します。この方法でも効率的にログアウトし、参加していたすべてのチャンネルからユーザーを退出させることができます。 |
|
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 インスタンスを、そのインスタンス ID、デバッグ名 (区別するうえで役立つ)、作成したユーザー インターフェース数とともに一覧表示します。 |
|
インスタンスの現在の状態と、関連付けられているすべてのユーザー インターフェースをログにダンプします。 |
|
該当するインスタンスを初期化します。 |
|
該当するインスタンスの初期化を解除します。 |
|
該当するインスタンスを「接続します」。これは EOS Voice Chat で常に正常に処理されます。EOS Voice はチャンネルごとに接続を処理するためです。 |
|
該当するインスタンスの接続を解除します。 |
|
新しい IVoiceChatUser インターフェースを作成します。 |
|
|
|
この方法は画面を分割しないゲームで便利です。単一のユーザー インターフェースを作成できます。その際、そのインターフェースを必要とするコマンドで |
|
力デバイスのボリュームを設定します。「0.0」から「1.0」までの float 値を指定できます。 |
|
入力デバイスをミュートします。 |
|
入力デバイスのミュートを解除します。 |
|
使用できる入力デバイスを一覧表示します。 |
|
特定の入力デバイスを選択します。 |
|
使用する入力デバイスをデフォルトに戻します。 |
|
出力デバイスのボリュームを設定します。「0.0」から「1.0」までの float 値を指定できます。 |
|
出力デバイスをミュートします。 |
|
出力デバイスのミュートを解除します。 |
|
使用できる出力デバイスを一覧表示します。 |
|
特定の出力デバイスを選択します。 |
|
使用する出力デバイスをデフォルトに戻します。 |
|
このインターフェースにユーザーをログインさせます。 |
|
このユーザー インターフェースからユーザーをログアウトさせます。 |
|
指定したチャンネルに参加します。このコマンドでは、クライアント ベースの URL や参加者トークンを信頼済みサーバーにクエリすることなく、コンフィギュレーション ファイルの |
|
指定したチャンネルから退出します。 |
|
指定した特定のチャンネルに対してのみ送信します。 |
|
すべてのチャンネルに対して送信します。 |
|
どのチャンネルに対しても送信しません。 |
|
指定したリモート プレイヤーをミュートします。相手の声は自分に伝わりませんが、自分の声は相手に伝わります。相手に対しても入力の送信を停止するには、block コマンドを参照してください。 |
|
指定したリモート プレイヤーに対するミュートを解除します。 |
|
指定したリモート プレイヤーをブロックして、互いに音声が聞こえないようにします。 |
|
指定したリモート プレイヤーのブロックを解除します。 |
ログ出力
LogEOSVoiceChat
ログ カテゴリは、上記のコンソール コマンドをはじめとする、EOSVoiceChat プラグイン自体が出力するログをすべて含みます。また、 LogEOSSDK
ログ カテゴリはベースの EOS SDK が出力するログを含みます。LogEOSSDK
ログ カテゴリの冗長レベルを変更すると、EOS SDK Logging インターフェース のログ冗長設定も更新されるため、この 2 つは常に同期されています。