有一个 Push To Talk 的演示场景展示了如何执行此操作。
让我尝试解释一下如何使用当前的 Photon Voice 实现玩家到玩家的语音聊天:
Photon Voice 使用语音组(只不过是 Photon LoadBalancing 的“Interest Groups”)来分隔语音通道/目标。
过滤传入的声音(选择“听什么”或“你想听谁”):
每个演员都需要订阅它感兴趣的语音组。默认情况下,所有演员都会收听音频组 0,这可以看作是用于语音广播的全局音频组。如果您想收听发送到其他组的语音,您需要订阅它们。您还可以取消订阅以前订阅的内容。做这一切的操作是:PhotonVoiceNetwork.Client.ChangeAudioGroups(byte[] groupsToRemove, byte[] groupsToAdd);
选择单个传输目标音频组(选择“你想和谁交谈”):
每个演员都需要决定要将音频传输到哪个语音组。可以使用PhotonVoiceRecorder.AudioGroup设置目标音频组。
因此,根据用例,您可以做的是:
- 对单个组讲话并聆听多个组。你可以和你听的人以外的人交谈。您可以收听所有可用的群组。
- 对单个组讲话,只听默认组。
- 说和听同一个音频组。对于这个特殊的用例,有一个快捷方式可以通过设置在这个单一的输入/输出组之间切换:
PhotonVoiceNetwork.Client.GlobalAudioGroup。如果您选择设置GlobalAudioGroup,则无需调用ChangeAudioGroups 或设置PhotonVoiceRecorder.AudioGroup,因为它是在内部为您完成的。
在这三种情况下,您始终收听默认音频组 0。
Photon Voice 演示为私人(1 对 1)语音聊天提供了两个选项:
- “MuteOthersWhileTalking”已启用:对应案例 n°3。
- “MuteOthersWhileTalking”已禁用:对应于案例 n°1。
演示中的音频组是这样构建的:
我们有 4 个演员的房间。
我们需要 6 个音频组。
对于每对演员,我们计算一个唯一的组码。
- 演员 A,演员编号(玩家 ID)等于 x
- 演员 B,演员编号等于 y
下面是我们如何获取 A 和 B 之间私人语音聊天的音频组(如果演员编号达到 24 我们有问题):
if (x < y)
{
AudioGroup = y + x * 10;
}
else if (x > y)
{
AudioGroup = x + y * 10;
}
else
{
// error
}
示例:演员 1 和 2 的音频组为 12。
“计算”私人语音组的另一种方法是将演员编号用作音频组:每个演员订阅一个音频组,其代码等于其演员编号。每当您想与远程演员交谈时,您都将目标音频组(仅使用PhotonVoiceRecorder.AudioGroup)设置为目标演员编号。
这种方法的优点:
- 更少的音频组:我们需要与演员一样多的音频组。
- 更少的音频组切换:单个音频组可订阅且无需取消订阅。
这种方法的缺点:
- 您不能静音任何其他演员。您将听取任何想私下与您交谈的人的意见。