2017-05-21 21 views
1

나는 광자 음성 단결로 개인 채팅을하려고했지만 지금까지는 할 수 없었다. 오디오 그룹의 개념을 읽었습니다 https://doc.photonengine.com/en-us/voice/current/getting-started/voice-for-pun 프로젝트에서 먼저 player1에 참여하는 것은 방을 만들고 기본 오디오 그룹을 0으로 설정 한 마스터 클라이언트입니다. 합류하는 플레이어가 1 대 1의 대화에서 플레이어 1과 대화 할 수있게하려는 데모 푸시 토픽을 사용하고 있습니다. 나는 마스터 클라이언트 player1 다른 오디오 그룹에 가입 한 다른 플레이어에게 다른 오디오 그룹을 제공하고 마스터 클라이언트가 단추 또는 이벤트를 눌러 작동하도록 만들었지 만 그렇게하지 못하게했습니다. 플레이어 1이 사적인 대화에서 다른 모든 플레이어의 말을들을 수 있기를 바랍니다. 데모 장면을 사용하여 설명을위한 예제를 광자 음성 스크립트로 제공하십시오. 난 그냥 OnVoiceClientStateChanged()SetAudioGroup()을 수정Unity의 Photon Voice에서 모든 플레이어와 하나의 플레이어를 대화하는 방법은 무엇입니까?

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(); 
    } 
} 

답변

0

- 여기에 코드입니다. 은 ChangeAudioGroups()에 전화하기 전에 설정해야합니다.

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 }); 
      } 
     } 
    }