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

时间:2017-04-26 02:51:34

标签: unity3d unity5 multiplayer photon

您好我是多人游戏开发的新手,我正在使用光子语音,并希望在一个有很多玩家的房间内的两个玩家之间进行私人语音聊天。我被指示了 https://doc.photonengine.com/en-us/voice/current/getting-started/voice-for-pun?utm_campaign=sendgrid&utm_source=sendgrid.com&utm_medium=email 通过光子的支持,但我无法使它工作。我应该如何在这个多人游戏中进行私人语音聊天。请举例解释。谢谢

1 个答案:

答案 0 :(得分:0)

Push To Talk有一个演示场景,展示了如何做到这一点。 让我尝试解释如何使用当前的Photon Voice实现播放器到播放器的语音聊天:

Photon Voice使用语音组(只有Photon LoadBalancing的“Interest Groups”)来分离语音通道/目标。

过滤传入的声音(选择“听到的内容”或“您想听谁”):

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

选择单个传输目标音频组(选择“您想与谁通话”):

每个演员都需要决定要传输音频的语音组。可以使用PhotonVoiceRecorder.AudioGroup设置目标音频组。

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

  1. 与单个小组交谈,听取多个小组的意见。您可以与您听的人以外的其他人交谈。您可以收听所有可用的群组。
  2. 与单个群组对话并仅收听默认群组。
  3. 说出并聆听同一个音频组。对于此特定用例,可通过设置:PhotonVoiceNetwork.Client.GlobalAudioGroup在此单个输入/输出组之间切换。如果您选择设置GlobalAudioGroup,则无需致电ChangeAudioGroups或设置PhotonVoiceRecorder.AudioGroup,因为它已在您内部完成。
  4. 在这三种情况下,您始终会听默认音频组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)设置为目标演员编号。 这种方法的优点是:

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

    这种方法的缺点:

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