PUN Voice Push To Talkデモ
Push To Talkデモでは、以下について説明します:
- Push-to-Talk機能。
- プライベートボイスチャット。
このドキュメントではこれらの機能について説明し、使用方法を記載します。
Push-to-Talkモード
オンデマンドで音声を転送するには:
PhotonVoiceSettings.AutoTransmit
をfalse
に設定します。- 送信を開始するには、
PhotonVoiceRecorder.Transmit
をtrue
に設定します。 - 送信を停止するには、
PhotonVoiceRecorder.Transmit
をfalse
に設定しなおします。
このデモでは、キーボードキー(ブロードキャストに'v'、参加アクターの番号に対応する数字キー)とUIボタン(ブロードキャストに「TalkToAll」、
参加アクター番号'X'ごとに「TalkToX」)をPush-to-Talkグループにひもづけ、PushToTalkOn
メソッドとPushToTalkOff
メソッドを使用します。
インタレストグループの使用法詳細説明
Photon VoiceはPhoton Realtimeの"インタレストグループ"を使用して、異なる「ボイス会話」に属する相互に排他的な「ボイスチャネル」を切り離しています。
「聞く相手」を選択する
各アクターは、興味のあるインタレストグループに登録する必要があります。
デフォルトで、すべてのアクターはボイスのブロードキャストについてグローバルインタレストグループとみなされる、インタレストグループ0をリッスンするようになっています。
他のグループに送信されたボイスを聞くには、送信先のグループに登録する必要があります。
一度登録したグループから登録解除することもできます。
これらすべての操作方法は以下の通りです。:
C#
PhotonVoiceNetwork.Client.ChangeAudioGroups(groupsToRemove, groupsToAdd);
「話す相手」を選択する
各アクターは、どのインタレストグループに音声を送信するか決定する必要があります。
送信先となるインタレストグループは以下のように設定します。
C#
photonVoiceRecorder.AudioGroup = targetGroup;
ユースケース
全てのケースにおいて、常にデフォルトのインタレストグループ0をリッスンしています。同時に PhotonVoiceRecorder
コンポーネントごとにボイスを単一のインタレストグループに送信できます。
ユースケースは3つのカテゴリに分類できます:
1. シングルグローバルグループ
同時に単一のグループを1つ使用して、すべてのクライアントとすべての PhotonVoiceRecorder
コンポーネントにボイスを送信する場合は、このグローバルグループに設定・切替を行うショートカットがあります。
C#
PhotonVoiceNetwork.Client.GlobalAudioGroup = targetGroup;
この場合ChangeAudioGroups
を呼び出したりPhotonVoiceRecorder.AudioGroup
を設定する必要はありません。システムが行います。
注:
targetGroup
が0
と等しい場合は、デフォルトの挙動になります。
変更を加えたり設定をリセットしない限り、グローバルグループとして明示的に設定する必要はありません。targetGroup
が0
と等しくない場合でも、同グループに送信されたボイスストリームを受信します。- すべての
PhotonVoiceRecorder
コンポーネント送信はグローバルに設定された同じターゲットグループを使用します。
2. シングルグループをリッスンする
これは、以下が許可されている点でひとつ前のカテゴリとは異なります:
PhotonVoiceRecorder
ごとに別のターゲットグループを設定する- リッスンするグループは、話すグループとは別の可能性があります。
A. デフォルトグループ
C#
// 全てのグループから登録解除します。グループが変更されていない場合は任意です。
PhotonVoiceNetwork.Client.ChangeAudioGroups(new byte[0], null);
// ターゲットインタレストグループを設定します
photonVoiceRecorder.AudioGroup = targetGroup;
B. 他のグループ
C#
// リッスンするグループに登録します
PhotonVoiceNetwork.Client.ChangeAudioGroups(new byte[0], new byte[1] { groupToListenTo });
// ターゲットインタレストグループを設定します
photonVoiceRecorder.AudioGroup = targetGroup;
3. 複数のグループをリッスンする
A. 既存のグループすべてをリッスンする
C#
// 既存のグループすべてに登録します
PhotonVoiceNetwork.Client.ChangeAudioGroups(null, new byte[0]);
// ターゲットインタレストグループを設定します
photonVoiceRecorder.AudioGroup = targetGroup;
あとで、この呼び出しの後に生成されたグループに登録する必要があります。
B. グループのAリストをリッスンする
C#
// グループのカスタムリストに登録します
PhotonVoiceNetwork.Client.ChangeAudioGroups(new byte[0], groupsToListenTo);
// ターゲットインタレストグループを設定します
photonVoiceRecorder.AudioGroup = targetGroup;
自分がリッスンしているグループ以外のグループに話すことができます。
例 groupsToListenTo
はtargetGroup
を含めませんでした。
C. 可能なグループすべてをリッスンする
こちらは慎重に使用してください。使用されることのないグループにクライアントを登録してしまう可能性があります。
C#
using System;
using System.Linq;
// [...]
byte[] allByteValues = Enumerable.Range(1, 255).SelectMany(BitConverter.GetBytes).ToArray();
// 可能なグループ全てに登録します
PhotonVoiceNetwork.Client.ChangeAudioGroups(null, allByteValues);
// ターゲットインタレストグループを設定します
photonVoiceRecorder.AudioGroup = targetGroup;
デモでの音声グループの使用方法
Photon VoiceのPush-to-Talkデモでは、ボイスチャットに2つのオプションを提供しています:
- 「MuteOthers」を有効化: 上記の3.A.に該当します。
PushToTalkScript.MuteOthersWhileTalking
がtrue
の場合には、PushToTalkScript.KeepOnlyOneGroup((byte)CurrentTargetGroup);
を呼び出します。 - 「MuteOthers」を非有効化: 上記の2に該当します。
PushToTalkScript.MuteOthersWhileTalking
がfalse
の場合には、PushToTalkScript.SubscribeToAllPrivateGroups();
を呼び出します。
「MuteOthers」モードは、UIトグルボタンを使用すればいつでも変更できます。
デモ内の音声グループは、以下のように設計されています:
- アクター4人用のルームがあります。
- ブロードキャスト対象の音声グループとして、デフォルトグループ0を使用します。
- 6つの custom private 音声グループが必要です:アクターのペアを、固有のグループコードで計算します。
- ローカルアクターがルームに参加すると、そのアクターは以前参加していた音声グループに登録します。
- 新しいリモートアクターがルームに参加すると、ローカルアクターは対応する音声グループに登録します。
PushToTalkScript.OnPhotonPlayerConnected
を参照してください。 - リモートアクターがルームを退出すると、ローカルアクターは対応する音声グループから登録解除します。
PushToTalkScript.OnPhotonPlayerDisonnected
を参照してください。 - 2人のプレイヤー間(ローカルおよびリモート)でのプライベートボイスチャットの音声グループを取得する方法は、以下のとおりです:
C#
// snippet from PushToTalkPrivateButton.SetAudioGroup
if (PhotonNetwork.player.ID < TargetActorNr)
{
// note: actor numbers should not reach 25
AudioGroup = (byte) (TargetActorNr + PhotonNetwork.player.ID * 10);
}
else if (PhotonNetwork.player.ID > TargetActorNr)
{
AudioGroup = (byte) (PhotonNetwork.player.ID + TargetActorNr * 10);
}
else
{
return;
}
例:アクター1とアクター2の音声グループは12です。
別の変数
プライベート音声グループを「計算」する別の方法は、アクター番号を音声グループとして使用する点です:
- 各アクターは1つの音声グループに、自分のアクター番号と同じコードで登録します。
- リモートアクターと話したい場合には、対象の音声グループ(
PhotonVoiceRecorder.AudioGroup
のみを使用)を対象のアクター番号に設定します。
メリット
- より少ない音声グループ:アクターと同じ数の音声グループが必要です。
- より少ない音声グループの切替:1つの音声グループに登録し、登録解除はできません。
デメリット
- 他のアクターをミュートできません。
あなたと話したいユーザーを、個別に聞くこととなります。