BLOGブログ

2018.03.30UE4UE/ Audio

[UE4] UE 4.19 でアップデートされたボイスチャット機能について

エンジニアの加藤です。
今回は、ボイスチャット機能 (正確には VoIP) について解説していきたいと思います。

ボイスチャット機能自体は以前から UE4 で利用可能でしたが、UE 4.19 からは Unreal Audio Engine を利用することで、Spatialization、Distance Attenuation、Reverb、Source Effect を効かせることができるようになりました。簡単に言えば、相手プレイヤーの声をその人が操作しているキャラクターの位置から出力させたり、ボイスチェンジャーのように声にエフェクトをかけたりすることができます。

注意点

● ボイスチャット機能を利用するには Session を組む必要があります
(コンソールコマンド open を使ってサーバー IP アドレスを直接指定して接続する方法では利用できません)

● Unreal Audio Engine を有効にする方法や Source Effect の作成方法についてはこの記事では触れませんので、以下のスライドを参考にしてください
【出張ヒストリア2017】新しいUnreal AudioEngineでインタラクティブサウンドコンテンツはどこまでつくれるか!?

● 使用バージョンは UE 4.19.0 です

● Windows PC 2 台を LAN 接続した環境でテストを行いました

ボイスチャット機能を有効にする

ボイスチャット機能を有効にするために、プロジェクトの .ini ファイルを編集します。

《プロジェクトディレクトリ》/Config にある DefaultEngine.ini に以下を追記します。

[Voice]
bEnabled=true

[OnlineSubsystem]
DefaultPlatformService=Null
bHasVoiceEnabled=true

同ディレクトリ内の DefaultGame.ini にも以下を追記します。

[/Script/Engine.GameSession]
bRequiresPushToTalk=false

Push to Talk (特定キー押下時のみ声を送信する方式) にしたい場合は、bRequiresPushToTalk を true にした上でキー設定を行う必要があります。ここでは常時送信で構わないので false を設定しています。

VoipTalker の生成・登録・設定

上記の .ini ファイルの編集を行った時点で Session を組んだ相手とのボイスチャットができるようになっていますが、UE 4.19 から追加された機能を使うためには、VoipTalker という Scene Component を合わせて利用する必要があります。ここでは Character クラスをベースに作成した Blueprint に VoipTalker を追加し、設定を行うことにします。

VoipTalker の追加は Add VOIP Talker ノードで行います。

その後、Register with Player State ノードを使い、どのプレイヤーの声を出力するかを Player State を与えることで指定します。ここでは Pawn の Player State を与えているので、この Character を操作しているプレイヤーの声が出力されることになります。Character の Begin Play のタイミングでは Player State が Valid でない可能性があるので、ここでは (良い方法であるとは言いにくいですが) Valid になるまで Delay を挟んで取得を試み続けるようにしています。

最後に VoiceSettings 構造体を作成し、VoipTalker の Settings に Set します。VoipTalker の位置が声の出力位置となるため、ここでは Component To Attach To に口のあたりに置いた Scene Component を与えています。Attenuation Settings と Source Effect Chain にも適用したい減衰設定とエフェクトのチェーンを与えます。

Session の 生成・検索・参加 処理の作成

Create Session / Find Sessions / Join Session ノードを用いて Session 関連処理を行う Event を実装します。エラーハンドリングを行っていない大変簡易的なものですが、参考のためにノードの画像を置いておきます。Game Instance 内に実装しています。

テスト

上記 Session 関連 Event を利用して 2 台の PC をネットワーク接続し、ボイスチャットのテストを行った動画が以下となります。

奥側のキャラクターを操作しているプレイヤーがマイクに向かって喋り、それを手前側のプレイヤーが聴いているという状況です。

キャラクターが左右に動くとパンも左右に振られているのがわかるかと思います。

また、動画の一番最後では声に Bit Crusher というエフェクトをかけています。最初は何も Source Effect が入っていない Source Effect Chain を使用し、最後で Bit Crusher が入っている Source Effect Chain に差し替えるということを行っています。以下は E キーを押すと 2 つの Source Effect Chain を交互に差し替えるノードです。

ネットワーク対応ゲームを作る際には是非使用してみてください。