2017-05-21 19 views
1

Ich habe versucht, private Chat in Photon Voice-Einheit möglich, aber bisher nicht in der Lage zu machen. Ich lese das Konzept für Audio-Gruppen https://doc.photonengine.com/en-us/voice/current/getting-started/voice-for-pun In dem Projekt zuerst der player1 Beitritt ist der Master-Client, der Raum erstellt und die Standard-Audio-Gruppe auf Null gesetzt. Ich benutze das Demo-PushTotalk, wo ich möchte, dass die beitretenden Spieler in der Lage sind, im Einzelgespräch mit dem Spieler zu sprechen. Ich habe versucht, den anderen Spielern, die sich dem Master-Client-Player1 anschließen, verschiedene Audio-Gruppen zu geben und den Master-Client dazu zu bringen, sie per Knopfdruck oder Ereignis zu abonnieren, damit es funktioniert, aber es nicht geschafft hat. Ich möchte nur, dass der Player1 in der Lage ist, alle anderen Spieler in einem privaten Gespräch zu hören. Bitte geben Sie Beispiele zur Erklärung mit der Demoszene in Photon Voice Script. Hier ist der Code -Wie kann man mit Photon Voice in Unity von allen Spielern zu einem Spieler sprechen?

using Client.Photon.LoadBalancing; 
using UnityEngine; 
using UnityEngine.UI; 
[RequireComponent(typeof(Button))] 
public class PushToTalkPrivateButton : MonoBehaviour 
{ 
    [SerializeField] 
    private Button pushToTalkPrivateButton; 
    [SerializeField] 
    private Text buttonText; 
    private PushToTalkScript pttScript; 
    public byte AudioGroup; 
    public bool Subscribed; 

      private void Start() 
    { 
     pttScript = FindObjectOfType<PushToTalkScript>(); 
     PhotonVoiceNetwork.Client.OnStateChangeAction += OnVoiceClientStateChanged; 
    } 


      private void OnVoiceClientStateChanged(ClientState state) 
    { 
     Debug.LogFormat("VoiceClientState={0}", state); 
     if (pushToTalkPrivateButton != null) 
     { 
      switch (state) 
      { 
       case ClientState.Joined: 
        pushToTalkPrivateButton.gameObject.SetActive(true); 
        Subscribed = Subscribed || PhotonVoiceNetwork.Client.ChangeAudioGroups(null, new byte[1] { AudioGroup }); 
        break; 
       default: 
        pushToTalkPrivateButton.gameObject.SetActive(false); 
        break; 
      } 
     } 
    } 

    public void SetAudioGroup(PhotonPlayer player) 
    { 
     if (!Subscribed) 
     { 
      buttonText.text = string.Format("Talk-To-Player{0}", player.ID); 
      int targetActorNr = player.ID; 
      if (PhotonNetwork.player.ID < targetActorNr) 
      { 
       AudioGroup = (byte) (targetActorNr + PhotonNetwork.player.ID*10); 
      } 
      else if (PhotonNetwork.player.ID > targetActorNr) 
      { 
       AudioGroup = (byte) (PhotonNetwork.player.ID + targetActorNr*10); 
      } 
      else 
      { 
       return; 
      } 
      if (PhotonVoiceNetwork.ClientState == ClientState.Joined) 
      { 
       Subscribed = PhotonVoiceNetwork.Client.ChangeAudioGroups(null, new byte[1] { AudioGroup }); 
      } 
     } 
    } 

    public void PushToTalkOn() 
    { 
     if (Subscribed) 
     { 
      PhotonVoiceNetwork.Client.GlobalAudioGroup = AudioGroup; 
      pttScript.PushToTalk(true); 
     } 
    } 

    public void PushToTalkOff() 
    { 
     pttScript.PushToTalkOff(); 
    } 
} 

Antwort

0

ich nur OnVoiceClientStateChanged() und SetAudioGroup() modifiziert. AudioGroup muss vor dem Anruf ChangeAudioGroups() festgelegt werden.

private void OnVoiceClientStateChanged(ClientState state) 
    { 
     Debug.LogFormat("VoiceClientState={0}", state); 
     if (pushToTalkPrivateButton != null) 
     { 
      switch (state) 
      { 
       case ClientState.Joined: 
        //Subscribed = Subscribed || PhotonVoiceNetwork.Client.ChangeAudioGroups(null, new byte[1] { AudioGroup }); 
        break; 
       default: 
        pushToTalkPrivateButton.gameObject.SetActive(false); 
        PhotonVoiceNetwork.Client.ChangeAudioGroups(byte[0], null); 
        break; 
      } 
     } 
    } 

    public void SetAudioGroup(PhotonPlayer player) 
    { 
     if (!Subscribed) 
     { 
      buttonText.text = string.Format("Talk-To-Player{0}", player.ID); 
      int targetActorNr = player.ID; 
      if (PhotonNetwork.player.ID < targetActorNr) 
      { 
       AudioGroup = (byte) (targetActorNr + PhotonNetwork.player.ID*10); 
      } 
      else if (PhotonNetwork.player.ID > targetActorNr) 
      { 
       AudioGroup = (byte) (PhotonNetwork.player.ID + targetActorNr*10); 
      } 
      else 
      { 
       return; 
      } 
      if (PhotonVoiceNetwork.ClientState == ClientState.Joined) 
      { 
       pushToTalkPrivateButton.gameObject.SetActive(true); 
       Subscribed = PhotonVoiceNetwork.Client.ChangeAudioGroups(null, new byte[1] { AudioGroup }); 
      } 
     } 
    } 
Verwandte Themen