如何在 Photon Voice Unity3D 中使用音频组?

How to use Audio Groups in Photon Voice Unity3D?

你好,我是多人游戏开发的新手,我正在使用光子语音,想在一个有很多玩家的房间里让两个玩家进行私人语音聊天。我被引导到 https://doc.photonengine.com/en-us/voice/current/getting-started/voice-for-pun?utm_campaign=sendgrid&utm_source=sendgrid.com&utm_medium=email 通过光子的支持,但我无法让它工作。我应该如何在此多人游戏中进行私人语音聊天。请举例说明。谢谢

有一个一键通演示场景,展示了如何执行此操作。 让我尝试解释一下如何使用当前的 Photon Voice 实现玩家对玩家的语音聊天:

Photon Voice 使用语音组(不过是 Photon LoadBalancing 的“Interest Groups”)来分离语音 channels/targets。

过滤传入的声音(select "what to hear" 或 "who do you want to listen to"):

每个演员都需要订阅自己感兴趣的语音组。默认情况下,所有演员都收听音频组0,可以将其视为语音广播的全局音频组。如果您想收听发送到其他群组的语音,您需要订阅它们。您也可以取消订阅以前订阅的。做这一切的操作是:PhotonVoiceNetwork.Client.ChangeAudioGroups(byte[] groupsToRemove, byte[] groupsToAdd);

Select单个传输目标音频组(select "who do you want to talk to"):

每个演员需要决定要向哪个语音组传输音频。可以使用 PhotonVoiceRecorder.AudioGroup.

设置目标音频组

因此,根据用例,您可以做的是:

  1. 对一个小组讲话并听多个小组。你可以和你听的人以外的其他人说话。您可以收听所有可用的群组。
  2. 对单个群组讲话,只听默认群组。
  3. 说和听同一个音频组。对于这个特定的用例,有一个快捷方式可以通过设置在这个 in/out 组之间切换:PhotonVoiceNetwork.Client.GlobalAudioGroup。如果您选择设置 GlobalAudioGroup,则无需调用 ChangeAudioGroups 或设置 PhotonVoiceRecorder.AudioGroup,因为它已在内部为您完成。

在这三种情况下,您始终收听默认音频组 0。

Photon Voice 演示提供了两种私人(1 对 1)语音聊天选项:

  • "MuteOthersWhileTalking" 启用:对应案例 n°3。
  • "MuteOthersWhileTalking" 禁用:对应于案例 n°1。

演示中的音频组是这样构造的: 我们有 4 名演员的房间。 我们需要 6 个音频组。 对于每对演员,我们计算一个唯一的组代码。

  • 演员编号(玩家ID)等于x的演员A
  • 演员编号等于y的演员B

下面是我们如何获取A和B之间私聊的音频组(如果演员号达到24我们就有问题):

if (x < y)
{
     AudioGroup = y + x * 10;
}
else if (x > y)
{
     AudioGroup = x + y * 10;
} 
else 
{
     // error
} 

示例:演员 1 和 2 的音频组是 12。

"calculating"私有语音组的另一种方法是使用演员编号作为音频组:每个演员订阅一个代码等于其演员编号的音频组。每当您想与远程演员交谈时,您将目标音频组(仅使用 PhotonVoiceRecorder.AudioGroup)设置为目标演员编号。 这种方法的优点:

  • 更少的音频组:我们需要与演员一样多的音频组。
  • 更少的音频组切换:订阅单个音频组,无需取消订阅。

这种方法的缺点:

  • 您不能将任何其他演员设为静音。你会倾听任何想与你私下交谈的人。