如何在 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
.
设置目标音频组
因此,根据用例,您可以做的是:
- 对一个小组讲话并听多个小组。你可以和你听的人以外的其他人说话。您可以收听所有可用的群组。
- 对单个群组讲话,只听默认群组。
- 说和听同一个音频组。对于这个特定的用例,有一个快捷方式可以通过设置在这个 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
)设置为目标演员编号。
这种方法的优点:
- 更少的音频组:我们需要与演员一样多的音频组。
- 更少的音频组切换:订阅单个音频组,无需取消订阅。
这种方法的缺点:
- 您不能将任何其他演员设为静音。你会倾听任何想与你私下交谈的人。
你好,我是多人游戏开发的新手,我正在使用光子语音,想在一个有很多玩家的房间里让两个玩家进行私人语音聊天。我被引导到 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
.
因此,根据用例,您可以做的是:
- 对一个小组讲话并听多个小组。你可以和你听的人以外的其他人说话。您可以收听所有可用的群组。
- 对单个群组讲话,只听默认群组。
- 说和听同一个音频组。对于这个特定的用例,有一个快捷方式可以通过设置在这个 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
)设置为目标演员编号。
这种方法的优点:
- 更少的音频组:我们需要与演员一样多的音频组。
- 更少的音频组切换:订阅单个音频组,无需取消订阅。
这种方法的缺点:
- 您不能将任何其他演员设为静音。你会倾听任何想与你私下交谈的人。